根据文档,exclude()通过AND连接多个参数,但我的查询似乎使用OR逻辑。
我有以下型号:
class Book(models.Model):
# some fields
authors = models.ManyToManyField(Author)
我希望得到除了那些之外的所有书籍,其中只有一位作者,作者的身份证明是“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()
如何使用一个查询进行相同操作?
我的查询有什么问题?
答案 0 :(得分:0)
Try this; This is the OR operation.
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()