2017-10-04 108 views
1

比方说,我有三个型号在DjangoDjango的查询外键关系

用户

  • 用户名

  • 所有者ForeignKey的(用户)

  • 所有者外键(用户)

现在我的问题是 -

计数许多业主如何养狗和猫,与Django orm?或拥有狗和猫的所有者总数。

什么样的加入会是?

回答

2

你要算狗和猫的每个用户的数量与annotate,然后筛选其中该数字大于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

能否请你添加一些背景和解释你的答案? –

+0

+1对于模型的情况,添加[empty'order_by()'](https://docs.djangoproject.com/en/1.11/topics/db/aggregation/#order-by)也很重要可以有默认的顺序。 – hynekcer