如何创建Django自定义查询?

时间:2014-07-16 08:42:09

标签: mysql django search filter

我有一个名为UserInfo的模型,其中包含以下字段: id,姓名,号码

我想创建一个自定义搜索页面。这将具有以下元素: 搜索框,搜索按钮 与NAME匹配的文本字段 与NUMBER匹配的文本字段

它应该如何运作: 假设我输入'John'作为名称,输入'1234'作为相应文本框中的数字,然后单击搜索。结果应该显示条目“John”作为名称,“1234”作为数字。

我猜这个查询类似于以下内容: UserInfo.objects.filter(名称= '约翰')。过滤器(数= '1234')

之前我在PHP中做过这种查询,但这在Django中不起作用。我想知道我可以使用什么代码在查询中关联多个FILTERS,这样如果在名称和数字文本框中都有数据输入,我会得到如上所述的查询,但如果我只搜索名称,则查询变为: UserInfo.object.filter(name ='John')而不是

UserInfo.object.filter(名称= '约翰')。过滤器(数= '')

应该有一个简单的解决方案,我不知道。非常困惑。 : - /

4 个答案:

答案 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