有没有一种方法可以过滤表的同一列中的多个值?

时间:2019-12-09 18:20:47

标签: python django database

我真的很沮丧,不知道该怎么办。 我建立了一个网站,您可以在其中过滤具有许多参数的饮料,例如,商品的名称,我们的品牌...。但我也想添加一个复选框字段,您可以在其中标记某些体积并过滤我的他们的数据库。可以这么说,我想按名称可乐,可口可乐品牌以及0.7L和1L体积进行过滤。现在,我希望显示表中的所有商品,名称为可乐品牌可口可乐,并且容量为0.7升和1升

这不起作用,因为我在一个列中过滤了两个不同的值,所以用这种方式是不可能的,因为字段“ volume”不能为0.7和1。


        qsf = Content.objects.all().filter(Q(products__icontains=Cola) & Q(volume=0.7) & Q(volume=1) & Q(brand=Coca Cola))

我不能使用or运算符(|),因为不是我的过滤器不起作用。

这就像我的第三篇文章,因为我不知道如何解决这个问题,我真的希望你们能帮助我。

2 个答案:

答案 0 :(得分:1)

除了缺少括号外,我看不到您的帖子出了什么问题,但以下内容可能更好/更易于理解。

使用多个filter。通常,使用Q|进行过滤以在一列中进行or-type选择,对于每个过滤器,请在不同的列上使用多个.filter进行and-type选择。 (当然,您可以在一个.filter操作中合并多个过滤子句,在这种情况下,我认为您也可以使用.filter( volume__in = [0.7, 1.0] )。)

也许尝试

 qsf = Content.objects.all(
      ).filter( products__icontains='Cola'
      ).filter( 
          Q(volume=0.7) | Q(volume=1) 
      ).filter( brand='Coca Cola'
  )

(我对这种代码格式并不完全满意。也许最好关闭.filter并使用反斜杠在下一行继续?总之,这不相关)

答案 1 :(得分:0)

您应该能够使用|运算符,您可能只需要使用括号将Q个对象分组

qsf = Content.objects.all().filter(
    Q(products__icontains='Cola') &
    (Q(volume=0.7) | Q(volume=1)) &
    Q(brand='Coca Cola')
)