簡體   English   中英

我如何按月與其他帶注釋的字段分組?

[英]How do i group by month with other annotated fields?

我有一個這樣的模型:

    class Diary(models.Model):
        name = models.CharField()
        gender = models.CharField()
        date = models.DateField()
        happy = models.BooleanField()

在視圖中,我想按月對日記進行分組。 而且我也想用感情來注釋日記,所以如果happy=False,我想把它返回為Sad,如果happy=True那么我想返回Happy。 但是如果在我按日期分組后查詢集中有快樂=假和快樂=真,我想將感覺返回為悲傷。

我試着這樣注釋:

queryset = Diary.objects.all()
queryset = queryset.values('date')
queryset = queryset.annotate(feelings=Case(When(happy=True, then=Value("Happy"))), default=Value("Sad"))

但在同一個月,如果我有悲傷和快樂的感覺,我會得到兩行這樣的:

{
    "date": "2020-08-20",
    "feelings": "Happy"
},
{
    "date": "2020-08-20",
    "feelings": "Sad"
}

如果至少有一個查詢集具有happy = False,有沒有辦法按月對其進行分組並將感覺注釋為Sad? 抱歉,我對 Django 還比較陌生,提前致謝!

我不確定這是最好的方法,但我找到了一個可行的解決方案。 我將在這里提供我的解決方案,以防其他人需要它。

我先算一下每個月日記的快樂總量,

queryset = Diary.objects.all()
queryset = queryset.values('date')
queryset = queryset.annotate(
    happy_count=Count(Case(When(happy=True, then=1)))
)

然后我第二次注釋以獲得感受。

queryset = queryset.annotate(feelings=Case(When(
    happy_count=Count(Q(happy=True)), then=Value("Happy"),
    default=Value("Sad"), output_field=models.CharField()
)))

就是這樣! 如果您需要這個並遇到這個答案,我希望它對您有用!

暫無
暫無

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

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