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