Django: cómo obtener todos los objetos relacionados en el modelo de relación de un usuario con un solo conjunto de consultas

7Cosas

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?

dirkgroten

Utilice select_relatedy 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, groupstenga 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_relatedrealmente 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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo