我有一个带有过滤器的人员列表视图。过滤器具有以下代码:
if textquery:
qs = qs.filter()
qs = qs.filter(Q(name__icontains=textquery) |
Q(surname__icontains=textquery) |
Q(surname__icontains=textquery) & Q(name__icontains=textquery)
)
return qs
字符串
人们可以同时拥有名字和姓氏,并按预期搜索这些作品。然而,当我同时输入名字和姓氏时,程序没有返回任何结果(即使我认为最后的“&”操作应该包括这两个变量)。
总结:这是我目前查询的结果:
Person: 'John Doe'
Query: 'John'
Result: 'John Doe'
Person: 'John Doe'
Query: 'Doe'
Result: 'John Doe'
Person 'John Doe'
Query: 'Johh Doe'
Result: ''
型
有人知道我做错了什么吗?为什么NAME和SURNAME的匹配都没有返回任何结果?
3条答案
按热度按时间8wtpewkr1#
过滤器不返回任何东西,因为当前代码检查名字或姓氏是否包含FULL name。每次都将返回False。
John
不包含John Doe
。所以你需要将textquery解析为name和姓氏:字符串
gr8qqesn2#
@neverwalkaloner说得对。你可以使用他们的解决方案或尝试下面的这个,它结合了名字和姓氏在一起,使解决方案更灵活。所以现在即使textquery是“n D”,它仍然匹配。
字符串
oprakyz73#
您的查询工作正常。
字符串
也是正确的。试着理解。无名氏与约翰和无名氏都不匹配。