2017-10-04 9 views
1

Disons que, j'ai trois modèles Djangorequête Django Relation clé étrangère

utilisateur

  • Nom
  • nom d'utilisateur

Dog

  • Nom
  • propriétaire ForeignKey (Utilisateur)

Cat

  • Nom
  • propriétaire foreignkey (Utilisateur)

Maintenant, ma question est -

compter combien de propriétaires ont des chiens et les chats, avec django orm? ou le nombre total de propriétaires qui ont des chiens et des chats.

De quel type sera-t-il membre?

Répondre

2

Vous devez compter le nombre de chiens et de chats pour chaque utilisateur avec annotate puis filtrer où ce nombre est supérieur à 0.

from django.db.models import Count 


User.objects.annotate(
    has_dog=Count('dog'), 
    has_cat=Count('cat') 
).filter(
    has_dog__gt=0, 
    has_cat__gt=0 
).count() 
+0

Pouvez-vous s'il vous plaît ajouter un peu de contexte et d'explication à votre réponse? –

+0

+1 Il est également important d'ajouter un [empty 'order_by()'] (https://docs.djangoproject.com/fr/1.11/topics/db/aggregation/#order-by) pour le cas où le modèle pourrait avoir une commande par défaut. – hynekcer