如果任何陈述为真则排除

Exclude if any of statement is true

我正在构建一个简单的博客 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)

输出是什么?

显示 querysetcompleted=False 但不排除 exclude items is true.

之一

试了很多次还是不行

谢谢。

根据Django Docs

exclude(**kwargs)¶

Returns a new QuerySet containing objects that do not match the given lookup parameters.

The lookup parameters (**kwargs) should be in the format described in Field lookups below. Multiple parameters are joined via AND in the underlying SQL statement, and the whole thing is enclosed in a NOT().

您的代码有

exclude(rated_1=False, rated_2=False)

不(真与假)==不(真)=假

不(真与真)==不(真)=假

不(假和假)==不(假)=真

因此,仅当 评级为 1 和评级为 2 均为 TRUE 且只有其中一个为 TRUE 时,整体陈述才会评估为真。

要排除 OR 语句,或者对于更复杂的语句,您应该使用 Q Statements