Quiero obtener todos los objetos del usuario con un solo conjunto de consultas, pero no tengo idea al respecto ... Por favor, ayúdame
Ejemplo: obtuve un modelo de relación 2 con el modelo de usuario, puedo obtener los objetos con este código a continuación
User.objects.get(id=1).profile
User.objects.get(id=1).groups
Pero, ¿cómo puedo obtener todos los objetos del usuario con un solo conjunto de consultas?
Utilice select_related
y prefetch_related
, como se describe aquí :
user = User.objects.select_related('profile').prefetch_related('groups').get(id=1)
user.profile # does not query the database again
user.groups # does not query the database again
Sin embargo user
, groups
tenga en cuenta que dado que <-> es una relación m2m, esto afectará la base de datos dos veces en cualquier caso. Si solo está buscando un usuario específico, agregar el prefetch_related
realmente no hace una diferencia. Hace una diferencia si recorre una lista de usuarios, ya que solo se requiere una consulta para buscar todos los grupos relacionados con m2m, en lugar de una consulta para cada usuario:
users = User.objects.select_related('profile').prefetch_related('groups')\
.filter(is_staff=True)
for user in users: # 2 queries
print(user.profile)
for group in user.groups: # no database query
print(group.name)
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras