如何在注释内添加对Count的查找

时间:2019-01-03 13:42:14

标签: django python-3.x django-models annotations

我想获取状态为1的所有讲座的总数。目前,我只能使用以下代码行获取所有讲座的数量:

 topic = Topic.objects.annotate(lectures_count=Count('lectures')).get(id=topic_id)

这是我的模特

class Lecture(models.Model):
    id = HashidAutoField(primary_key=True)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE, related_name='lectures')
    status = models.BooleanField(default=1)


class Topic(models.Model):
        id = HashidAutoField(primary_key=True)
        name = models.CharField(max_length=100, null=False)
        status = models.BooleanField(default=1)

1 个答案:

答案 0 :(得分:2)

您可以这样做:

from django.db.models import Count, Case, When, IntegerField,

 Topic.objects.annotate(
     lecs_with_status_1=Count(
         Case(
             When(
                 lectures__status=1,
                 then=1
             ),
             output_field=IntegerField()
         )
     ).values('id', 'lecs_with_status_1')

因此,您将获得带有1个状态的讲座数的主题。