如何进行多对多Django查询以找到有2个给定作者的书?

我有一个查询,要求准确过滤具有ID的2位作者

从理论上讲

Book.objects.filter(author__id=1, author__id=2). 

这是不可能的。

我怎么解决这个问题?

回答:

起初并不直观,但是答案就摆在我们面前。

Book.objects.filter(author__id=1).filter(author__id=2)

如果你想要完全匹配,则可以通过仅具有2个作者的那些项来进一步过滤此结果。

Book.objects.annotate(count=Count('author')).filter(author__id=1)\

.filter(author__id=13).filter(count=2)

如果你希望动态地精确匹配,那么这样的事情呢?:

def get_exact_match(model_class, m2m_field, ids):

query = model_class.objects.annotate(count=Count(m2m_field))\

.filter(count=len(ids))

for _id in ids:

query = query.filter(**{m2m_field: _id})

return query

matches = get_exact_match(MyModel, 'my_m2m_field', [1, 2, 3, 4])

# matches is still an unevaluated queryset, so you could run more filters

# without hitting the database.

以上是 如何进行多对多Django查询以找到有2个给定作者的书? 的全部内容, 来源链接: utcz.com/qa/412829.html

回到顶部