Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 视图中的多个过滤器参数_Django_Django Views - Fatal编程技术网

Django 视图中的多个过滤器参数

Django 视图中的多个过滤器参数,django,django-views,Django,Django Views,我有一个基本的搜索视图。它当前查询数据库中来自特定客户机的任何对象。查看代码如下: def search_page(request): form = PrdSearchForm() prdlinks = [] show_results = True if request.GET.has_key('query'): show_results = True que

我有一个基本的搜索视图。它当前查询数据库中来自特定客户机的任何对象。查看代码如下:

def search_page(request):
        form = PrdSearchForm() 
        prdlinks = [] 
        show_results = True 
        if request.GET.has_key('query'): 
                show_results = True 
                query = request.GET['query'].strip() 
                if query:
                        form = PrdSearchForm({'query' : query}) 
                        prdlinks = \
                                ProjectRecord.objects.filter(client__icontains=query)

        if len(prdlinks) >= 1:
            records = ProjectRecord.objects.filter(client__icontains=query)
            t = get_template('org_list_client.html')
            html = t.render(Context({'records': records}))
            return HttpResponse(html)

        else:
            tpl = "prd_search.html"
            variables = RequestContext(request, { 'form': form, 
            'prdlinks': prdlinks, 
            'show_results': show_results}) 
            return render_to_response(tpl, variables)
我希望搜索字段按客户端和帐户检查对象。我认为,这将涉及修改此代码:

if query:
        form = PrdSearchForm({'query' : query}) 
        prdlinks = \
                 ProjectRecord.objects.filter(client__icontains=query)
要包括
ProjectRecord.objects.filter(account\u icontains=query)
。有人能帮我解释一下语法吗?或者我想完成的工作还有其他方面吗?

你可以试试,比如:

这将首先过滤包含查询的客户端,然后过滤该结果查询集,其中帐户也包含查询

一般形式:

>>> Entry.objects.filter(
...     headline__startswith='What'
... ).exclude(
...     pub_date__gte=datetime.now()
... ).filter(
...     pub_date__gte=datetime(2005, 1, 1)
... )
文档中包含了更多有用的示例:


重新构造视图代码,将客户记录(prdlinks)与帐户记录(acclinks)分开,并分别进行处理。我不确定它是否会工作(它会),也不确定这是否是编写代码的最有效方法(可能不是)。无论如何,以下是修订后的代码:

def search_page(request):
        form = PrdSearchForm() 
        prdlinks = []
        **acclinks = []**
        show_results = True 
        if request.GET.has_key('query'): 
                show_results = True 
                query = request.GET['query'].strip() 
                if query:
                        form = PrdSearchForm({'query' : query}) 
                        prdlinks = \
                                ProjectRecord.objects.filter(client__icontains=query)
                        **acclinks = \
                                ProjectRecord.objects.filter(account__icontains=query)**

        if len(prdlinks) >= 1:
            records = ProjectRecord.objects.filter(client__icontains=query)
            t = get_template('org_list_client.html')
            html = t.render(Context({'records': records}))
            return HttpResponse(html)

        **elif len(acclinks) >= 1:
            records = ProjectRecord.objects.filter(account__icontains=query)
            t = get_template('org_list_account.html')
            html = t.render(Context({'records': records}))
            return HttpResponse(html)**

        else:
            tpl = "prd_search.html"
            variables = RequestContext(request, { 'form': form, 
            'prdlinks': prdlinks, 
            'show_results': show_results}) 
            return render_to_response(tpl, variables)

我认为您正在寻找
Q
对象(由MYYN引用)


我认为这种链条在这种情况下不可行。例如,如果我的客户是,比如说施乐,并且该客户在我的“复印机foo”和“复印机bar”中有两个帐户。如果“copier bar”是我的搜索词,则筛选器将搜索名为“copier bar”的客户端,并为辅助帐户筛选器返回0个对象的查询集。将继续搜索文档。Gracias。尝试导入Q对象。问题是,如果我不将prdlinks与acclinks分开,Q查询将适用于客户端对象,因为它满足第三个“if”查询:“if len(prdlinks)>=1:…”但是如果搜索项是帐户名(与客户端名相反),则查询将返回“prdlink”但是不返回任何记录,因为if查询正在查找(client\uu icontains=query)。结果是它呈现一个空模板。(并且不会继续计算以下请求的“elif”查询(account\uu icontains=query))。
def search_page(request):
        form = PrdSearchForm() 
        prdlinks = []
        **acclinks = []**
        show_results = True 
        if request.GET.has_key('query'): 
                show_results = True 
                query = request.GET['query'].strip() 
                if query:
                        form = PrdSearchForm({'query' : query}) 
                        prdlinks = \
                                ProjectRecord.objects.filter(client__icontains=query)
                        **acclinks = \
                                ProjectRecord.objects.filter(account__icontains=query)**

        if len(prdlinks) >= 1:
            records = ProjectRecord.objects.filter(client__icontains=query)
            t = get_template('org_list_client.html')
            html = t.render(Context({'records': records}))
            return HttpResponse(html)

        **elif len(acclinks) >= 1:
            records = ProjectRecord.objects.filter(account__icontains=query)
            t = get_template('org_list_account.html')
            html = t.render(Context({'records': records}))
            return HttpResponse(html)**

        else:
            tpl = "prd_search.html"
            variables = RequestContext(request, { 'form': form, 
            'prdlinks': prdlinks, 
            'show_results': show_results}) 
            return render_to_response(tpl, variables)
from django.db.models import Q

records=ProjectRecord.objects.filter(
  Q(client__icontains=query) |
  Q(account__icontains=query)
)