django - Django group by 和 count(*),包括零计数
问题描述
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,
请帮助我并提前感谢^^。
解决方案
也许你可以这样尝试(使用related objects
):
authors = Author.objects.annotate(
book_count=Count(
'book',
filter=Q(book__is_deleted=False)
)
)
authors.values('name', 'book_count')
推荐阅读
- angular - 如何为 Angular CLI 设置 bazel 选项 --output_user_root
- amazon-web-services - 有没有办法通过 API Gateway 发送大文件?
- javascript - 方法中的 JavaScript 事件侦听器
- r - 我在 RI 中收到警告消息不理解
- php - Xdebug 让 PHP 太慢了
- flutter - Flutter Web 时通道溢出
- javascript - 在另一个模型上使用 getModel 时获取关联 sequelize
- node.js - 如何制作应用命令?
- sql - 一起查询多个数据源
- bash - 在终止前一个命令之前不执行第二个命令