簡體   English   中英

Django model 帶字符字段計數和零值

[英]Django model with Charfield Count and Zero values

我有一個 Django 數據庫 model 有一些屬性,其中之一是帶有選擇的 Charfield“類別”。 我現在想用每個類別的行數注釋這個 model 的查詢集。 問題是,我知道這樣做的方式,只有查詢集中存在的類別被計算在內,但我想要一個所有類別都用計數注釋的查詢集(如果沒有此類別的行,則為 0)。

這就是我目前正在做的事情:

Model.objects.all().values('category').annotate(total=Count('category'))

有沒有辦法顯示所有類別,包括計數為 0 的類別?

您不能計算不存在的類別,因為,嗯……這些不存在。 choices甚至不會傳輸到數據庫。

使用帶有choicesCharField並不是理想的建模方式。 通常,最好先制作一個 model Category ,然后制作另一個MyModelForeignKey [Django-doc]MyModel object 鏈接到Category ,所以:

class Category(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class MyModel(models.Model):
    category = models.ForeignKey(Category, on_delete=models.PROTECT)

然后我們可以創建如下類別:

Category.objects.bulk_create(
    Category(name='technology'),
    Category(name='art'),
    Category(name='science')
)

如果我們然后將MyModel對象鏈接到這些Category ,我們可以用MyModel的數量注釋Category

from django.db.models import Count

Category.objects.annotate(
    num_mymodel=Count('mymodel')
)

在這里,由此查詢集產生的Category將具有一個額外的屬性.num_mymodel ,其中包含鏈接的MyModel對象的數量。 由於執行了LEFT OUTER JOIN ,對於沒有任何MyModelCategory ,它將使用0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM