[英]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.