具有Charfield計數和零值的Django模型

我有一個Django數據庫模型,它有一些屬性,其中一個是Charfield“category”,帶有選項。現在我想用每個類別的行數來注釋這個模型的查詢集。問題是,按照我所知道的方法,只有queryset中存在的類別被計數,但是我想要一個queryset,其中所有的類別都用count注釋(如果沒有這個類別的行,則為0)。

這就是我目前正在做的:

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

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

? 最佳回答:

你不能計算不存在的類別,因為。。。這些都不存在。choices甚至沒有傳輸到數據庫。

CharFieldchoices結合使用并不是這方面的理想建模。通常,最好先創建一個模型Category,然后再創建另一個帶有ForeignKey[Django-doc]的MyModel,將MyModel對象鏈接到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')
)

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

主站蜘蛛池模板: 正在播放国产一区| 国产午夜精品一区二区三区漫画 | 精品动漫一区二区无遮挡| 日韩精品一区二区三区毛片| 日韩精品区一区二区三VR| 一区二区三区在线看| 国产一区二区福利久久| 麻豆精品人妻一区二区三区蜜桃 | 色偷偷一区二区无码视频| 精品日本一区二区三区在线观看| 精品国产一区二区麻豆| 无码丰满熟妇一区二区| 亚洲一区二区三区免费在线观看| 久久一区二区三区精品| 一区二区三区人妻无码| 亚洲色婷婷一区二区三区| 清纯唯美经典一区二区| 国产精品乱码一区二区三区 | 久久精品国产一区二区三区不卡| 无码人妻精品一区二区蜜桃百度| 在线观看精品视频一区二区三区| 久久精品无码一区二区三区不卡| 视频在线一区二区| 国产精品视频无圣光一区| 在线精品一区二区三区电影| 韩国精品一区二区三区无码视频| 国产精品视频一区麻豆| 亚洲精品日韩一区二区小说| 无码aⅴ精品一区二区三区| 人妻互换精品一区二区| 在线精品日韩一区二区三区| 国产a久久精品一区二区三区| 国产另类ts人妖一区二区三区| 国产精品视频一区二区三区不卡| 色婷婷AV一区二区三区浪潮 | 无码精品蜜桃一区二区三区WW| 国产成人综合精品一区| 亚洲av区一区二区三| 久久se精品动漫一区二区三区| 人妻AV一区二区三区精品| 亚洲无码一区二区三区|