如何从多个领域进行选择?

时间:2014-05-14 14:41:52

标签: python django

帮助请从“昵称”和“家庭”字段中进行选择。 在数据库中有以下table。我按如下方式对“昵称”字段进行抽样: views.py:

from django.db.models import Q

@login_required 
def friends_search(request):
    search_result = None

    if request.method == 'POST':    
        if request.POST.get('fld_name'):
            try:
                fld_name = request.POST.get('fld_name')
                search_result = UserProfile.objects.filter(Q(nickname__icontains=fld_name))     
                if not search_result:
                    search_result = 'По вашему запросу ничего не найдено.'
            except Exception as exc:
                search_result = 'В данный момент доступ к базе данных невозможен. Попробуйте повторить ваш запрос позже.'   

    t = loader.get_template('friends_search.html')
    c = RequestContext(request, {
        'search_result': search_result,
    }, [custom_proc])   
    return HttpResponse(t.render(c))

问题是我需要在“昵称”,“家庭”字段中同时采样。以下方法不起作用:

search_result = UserProfile.objects.filter(Q(nickname__icontains=fld_name), Q(family__icontains=fld_name))  

2 个答案:

答案 0 :(得分:1)

修改Complex lookups with Q objects, 您应该使用OR运算符|

它看起来像这样:

from django.db.models import Q

@login_required 
def friends_search(request):
    search_result = None

    if request.method == 'POST':    
        if request.POST.get('fld_name'):
            try:
                fld_name = request.POST.get('fld_name')
                q = Q(nickname__icontains=fld_name) | Q(family__icontains=fld_name)
                search_result = UserProfile.objects.filter(q)     
                if not search_result:
                    search_result = 'По вашему запросу ничего не найдено.'
            except Exception as exc:
                search_result = 'В данный момент доступ к базе данных невозможен. Попробуйте повторить ваш запрос позже.'   

    t = loader.get_template('friends_search.html')
    c = RequestContext(request, {
    'search_result': search_result,
}, [custom_proc])   
    return HttpResponse(t.render(c))

答案 1 :(得分:1)

如果你想进行AND查询,只需附加过滤器,如下所示:

UserProfile.objects.filter(Q(nickname__icontains=fld_name)).filter(Q(family__icontains=fld_name))