我有一个名为UserInfo的模型,其中包含以下字段: id,姓名,号码
我想创建一个自定义搜索页面。这将具有以下元素: 搜索框,搜索按钮 与NAME匹配的文本字段 与NUMBER匹配的文本字段
它应该如何运作: 假设我输入'John'作为名称,输入'1234'作为相应文本框中的数字,然后单击搜索。结果应该显示条目“John”作为名称,“1234”作为数字。
我猜这个查询类似于以下内容: UserInfo.objects.filter(名称= '约翰')。过滤器(数= '1234')
之前我在PHP中做过这种查询,但这在Django中不起作用。我想知道我可以使用什么代码在查询中关联多个FILTERS,这样如果在名称和数字文本框中都有数据输入,我会得到如上所述的查询,但如果我只搜索名称,则查询变为: UserInfo.object.filter(name ='John')而不是
UserInfo.object.filter(名称= '约翰')。过滤器(数= '')
应该有一个简单的解决方案,我不知道。非常困惑。 : - /
答案 0 :(得分:1)
过滤方法是可链接的,不可变的:)
def search_user(name=None, number=None):
# Uncomment the following lines to return NO records when no input.
# if not name and not number:
# return UserInfo.objects.none()
qs = UserInfo.objects.all()
if name:
qs = qs.filter(name=name)
if number:
qs = qs.filter(number=number)
return qs
如果没有输入,此示例将返回所有记录。
(请注意,QS是懒惰的,除非稍后访问,否则all()不会检索所有记录。)
答案 1 :(得分:1)
Q是Django中的一个强大功能。见Q class
from django.db.models import Q
# you cand do a lot of crazy things here
query = Q(name__iexact=name) & Q(number=number)
users = UserInfo.object.filter(query)
答案 2 :(得分:0)
我会做那样的事情
if name and number:
UserInfo.object.filter(name='John',number='1234')
答案 3 :(得分:0)
根据您的示例解决方案是......
MatchedUsers = UserInfo.object.filter(name='John',number='1234')
return MatchedUsers