1

给定一个具有两个 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)
...
4

1 回答 1

0

请试试:

authors.annotate(num_publishers=Count('book__publishers')).values('id', 'num_publishers')

结果将是:

<Queryser [{'id': 1, 'num_publishers': 10}, {'id': 2, 'num_publishers': 2}, ... ]>
于 2018-12-18T06:29:38.807 回答