Как добавить поиск в Count внутри аннотации - PullRequest
0 голосов
/ 03 января 2019

Я хочу получить количество всех лекций со статусом = 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 голосов
/ 03 января 2019

Вы можете сделать:

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 статусом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...