给出具有两个M2M字段的Django模型:
class Book(models.Model):
name = models.CharField(max_length=300)
authors = models.ManyToManyField(Author)
publishers = models.ManyToManyField(Publisher)
并从作者查询集开始:
authors = Author.objects.filter(...)
我如何annotate a count与作者互动的发布者数量(非排他性...)?
我可以获得作者拥有的图书数量:
authors.objects.annotate(num_books=Count('book'))
但是我要统计的是所有书籍的出版商数量。
例如,如果数据是这样的:
Book | Authors | Publishers
B1 A1 P1, P2
B2 A2, A1 P1
B2 A2 P1, P2, P3
...
带注释的计数为:
Author | Publishers
A1 3 (B1-P1, B1-P2, B2-P1)
A2 4 (B2-P1, B3-P1, B3-P2, B3-P3)
...
答案 0 :(得分:0)
请尝试:
authors.annotate(num_publishers=Count('book__publishers')).values('id', 'num_publishers')
结果将是:
<Queryser [{'id': 1, 'num_publishers': 10}, {'id': 2, 'num_publishers': 2}, ... ]>