Django группировка по счетчику (*), включает ноль отсчетов - PullRequest
0 голосов
/ 02 февраля 2020
class Author(models.Model):
   name = models.CharField(max_length=50)

class Book(models.Model):
   name = models.CharField(max_length=50)
   author = models.ForeignKey(Author,related_name='book' on_delete=models.CASCADE)
   is_deleted = models.BooleanField(default=False)

Я хочу отобразить количество книг каждого автора (включая ноль). Мой код:

Book.objects.filter(is_deleted =False).values('author').annotate(num=Count('id'))

, но он возвращает только значения больше нуля и потерял многих авторов. Как я могу получить такой результат:

author1:0,
author2:1,
author3:2,

Пожалуйста, помогите мне и заранее спасибо ^^.

1 Ответ

3 голосов
/ 02 февраля 2020

Может быть, вы можете попробовать вот так (используя related objects):

authors = Author.objects.annotate(
    book_count=Count(
        'book',
        filter=Q(book__is_deleted=False)
    )
)
authors.values('name', 'book_count')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...