我想获取状态为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)
答案 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个状态的讲座数的主题。