我有一個Django數據庫模型,它有一些屬性,其中一個是Charfield“category”,帶有選項。現在我想用每個類別的行數來注釋這個模型的查詢集。問題是,按照我所知道的方法,只有queryset中存在的類別被計數,但是我想要一個queryset,其中所有的類別都用count注釋(如果沒有這個類別的行,則為0)。
這就是我目前正在做的:
Model.objects.all().values('category').annotate(total=Count('category'))
有沒有辦法顯示所有類別,包括計數為0的類別?
你不能計算不存在的類別,因為。。。這些都不存在。
choices
甚至沒有傳輸到數據庫。將
CharField
與choices
結合使用并不是這方面的理想建模。通常,最好先創建一個模型Category
,然后再創建另一個帶有ForeignKey
[Django-doc]的MyModel
,將MyModel
對象鏈接到Category
,因此:然后我們可以創建如下類別:
如果我們隨后將
MyModel
對象鏈接到這些Category
,我們可以用MyModel
的數量來注釋Category
,并使用:在這里,這個queryset產生的
Category
將有一個額外的屬性.num_mymodel
,其中包含鏈接的MyModel
對象的數量。由于執行了LEFT OUTER JOIN
,對于沒有任何MyModel
的Category
,它將使用0
。