给定一个具有两个 M2M 字段的 Django 模型:
class Book(models.Model):
name = models.CharField(max_length=300)
authors = models.ManyToManyField(Author)
publishers = models.ManyToManyField(Publisher)
从作者的查询集开始:
authors = Author.objects.filter(...)
如何注释作者与...互动的出版商(非排他性)的数量?
我可以得到作者拥有的书籍数量:
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)
...