Исключить, если любое из утверждений истинно

Я создаю простое веб-приложение 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

Вернуться на верх