我真的很沮丧,不知道该怎么办。 我建立了一个网站,您可以在其中过滤具有许多参数的饮料,例如,商品的名称,我们的品牌...。但我也想添加一个复选框字段,您可以在其中标记某些体积并过滤我的他们的数据库。可以这么说,我想按名称可乐,可口可乐品牌以及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运算符(|),因为不是我的过滤器不起作用。
这就像我的第三篇文章,因为我不知道如何解决这个问题,我真的希望你们能帮助我。
答案 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')
)