Исключить, если любое из утверждений истинно
Я создаю простое веб-приложение Blog Post, и я пытаюсь exclude items if any of items is true
,
Но это checking for all statements
, то есть он проверяет, все ли утверждения истинны, чего я не ожидаю.
models.py
class BlogPost(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
body = models.CharField(max_length=30)
class Rate(models.Model):
by_user = models.ForeignKey(User, on_delete = models.CASCADE)
blog_of = models.ForeignKey(BlogPost, on_delete = models.CASCADE)
rated_1 = models.BooleanField(default=False)
rated_2 = models.BooleanField(default=False)
completed = models.BooleanField(default=False)
views.py
def page(request):
queryset = Rate.objects.filter(completed=False).exclude(rated_1=False, rated_2=False)
context = {'queryset':queryset}
return render(request, 'page.html', context)
Какой выход?
Он показывает queryset
, который является completed=False
, но не исключает, если один из exclude items is true
.
Я пробовал много раз, но он все еще не работает.
Любая помощь будет очень признательна. Спасибо.
Согласно Django Docs,
exclude(**kwargs)¶
Возвращает новый QuerySet, содержащий объекты, которые не соответствуют заданным параметрам поиска.
Параметры поиска (**kwargs) должны иметь формат, описанный ниже в разделе "Поиск полей". Несколько параметров объединяются с помощью AND в основном операторе SQL, и все это заключено в NOT().
Ваш код имеет
exclude(rated_1=False, rated_2=False)
и NOT (TRUE AND FALSE) == NOT (TRUE) = FALSE
NOT (TRUE И TRUE) == NOT (TRUE) = FALSE
NOT (FALSE И FALSE) == NOT (FALSE) = TRUE
поэтому общее утверждение будет оценено как true только тогда, когда both rated 1 и rated 2 являются TRUE, а не если только один из них является true.
Для исключения операторов OR или для более сложных операторов следует использовать Q Statements