根据文档,exclude()通过AND连接多个参数,但我的查询似乎使用OR逻辑。
我有以下型号:
class Book(models.Model):
# some fields
authors = models.ManyToManyField(Author)
我想获取除那些只有一位作者且作者 ID 为“12”之外的所有书籍:
q_and = Book.objects.annotate(authors_number=Count('authors')).exclude(authors_number=1, authors__in=['12'])
但是,我得到的结果类似于使用 OR 逻辑的查询:
q_or = Book.objects.annotate(authors_number=Count('authors')).exclude(authors_number=1).exclude(authors__in=['12'])
如果我过滤只有作者且作者 id='12' 的书籍,我会得到需要排除的书籍:
need_to_exclude = Book.objects.annotate(authors_number=Count('authors')).filter(authors_number=1, authors__in=['12'])
我知道如何在两个查询中实现我想要的内容,但是如何使用
exclude()
? 在一个查询中实现相同的内容
我的查询有什么问题吗?
试试这个;这就是“或”运算。
from django.db.models import Q
q = Q(Q(authors_number=1)| Q(authors__in=['12']))
q_and = Book.objects.annotate(authors_number=Count('authors')).exclude(q).distinct()