gpt4 book ai didi

python - Django Q 过滤器未按预期工作

转载 作者:行者123 更新时间:2023-12-01 05:41:21 25 4
gpt4 key购买 nike

我创建了一个库样式的搜索表单(您可以在其中添加新行以进一步搜索,并使用 AND、OR、AND NOT、OR NOT 等链接词)以允许他们在表单中构建搜索语句,然后我将其试图变成一个Q Filter。由于某种原因,我生成的过滤器似乎会返回所有包含 OR 的内容。 (“或”是指用户选择或作为他们的陈述)。

示例:我想创建一个 Q 过滤器,以便获取以 NAME 为数据字段、以 Test 为值的对象,或者以 Material 为数据字段、以 Steel 为值的对象。

当我打印出创建的 Q 时,这就是我得到的:

(AND: (OR: (AND: ), (AND: ('value__icontains', 'Test'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'Steel'), ('represents__exact', <DataField: 6-Materials>)))))

阅读该声明,它似乎应该起作用,但它不起作用,并且似乎只是返回所有内容。

这并不完全是我所拥有的,但它是表单的示例: enter image description here

更新:我更改了代码,以便生成的 Q 语句如下:

(OR: (AND: ('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)), (NOT (AND: ('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>))))

或者,以扩展形式:

(OR:
(AND:
('value__icontains', 'er'), ('represents__exact', <DataField: 3-Name>)
),
(NOT
(AND:
('value__iexact', 'er'), ('represents__exact', <DataField: 5-Keywords>)
)
)
)

不过,以下代码会打印出数据库中的所有内容:

    filtered = objects.filter(q)
print("Filtered: ", filtered)

最佳答案

看起来您生成查询集的方式存在错误。

重新组织生成的Q语句,看起来最外面的AND没有第二个表达式。

(AND: 
(OR:
(AND: ),
(AND:
('value__icontains', 'Test'),
('represents__exact', <DataField: 3-Name>)
),
(NOT
(AND:
('value__iexact', 'Steel'),
('represents__exact', <DataField: 6-Materials>)
)
)
)
)

此外,空的(AND:),也会带来问题,因此必须找到一种方法来删除空的Q对象

P.S:这不是一个完整的答案,而是一个方向,因为如果不查看代码,可能很难找出错误到底在哪里。

关于python - Django Q 过滤器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com