Согласно документации, exclude() объединяет несколько параметров с помощью AND, но вместо этого мой запрос использует логику ИЛИ.Django: несколько параметров в exclude объединены OR insted of AND
У меня есть следующие модели:
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'])
Но вместо этого, Я получаю результат, похожий на запрос с логикой ИЛИ:
q_or = Book.objects.annotate(authors_number=Count('authors')).exclude(authors_number=1).exclude(authors__in=['12'])
Если я фильтрую книги с единственным автором и uthor № в = '12' , я получаю те мне нужно исключить:
need_to_exclude = Book.objects.annotate(authors_number=Count('authors')).filter(authors_number=1, authors__in=['12'])
Я знаю, как сделать, что я хочу в двух запросов, но как сделать то же самое с одним запросом, используя exclude()
?
И что не так с моим запросом?
Я пробовал это. Результат совпадает с моими первыми двумя запросами. – opportunity356
Возможно, причина в m2m подана? – opportunity356
Можете ли вы попробовать с отличными() –