【问题标题】:Exclude if any of statement is true如果任何陈述为真,则排除
【发布时间】:2021-11-18 18:02:01
【问题描述】:

我正在构建一个简单的博客帖子网络应用程序,我正在尝试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之一。

试了很多次还是不行。

谢谢。

【问题讨论】:

    标签: python django django-views django-queryset


    【解决方案1】:

    根据Django Docs

    排除(**kwargs)¶

    返回一个新的 QuerySet,其中包含与给定查找参数不匹配的对象。

    查找参数 (**kwargs) 应采用以下字段查找中描述的格式。多个参数在底层 SQL 语句中通过 AND 连接,整个内容都包含在 NOT() 中。

    你的代码有

    exclude(rated_1=False, rated_2=False)

    与非(真与假)== 非(真)= 假

    非(真与真)== 非(真)= 假

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

    因此,只有当 1 级和 2 级 都为 TRUE 而只有其中一个为 TRUE 时,整个陈述才会评估为 true。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多