如何在Django中链接多功能搜索

如何在Django中链接多功能搜索,django,django-models,django-views,django-templates,Django,Django Models,Django Views,Django Templates,我有一个3过滤搜索工作。一个用于职位/说明/公司,一个用于工作类别(如银行),一个用于地点(如纽约) 如果我指定了任何一个过滤器,并且如果我指定了所有3个过滤器,那么如何链接查询以使其呈现适当的结果?如果我指定了所有3个过滤器,则应执行and。我试着用if else来做,但是时间太长了。还有别的办法吗 这是我的密码: views.py if request.method == "POST": internship_desc = request.POST['i

我有一个3过滤搜索工作。一个用于职位/说明/公司,一个用于工作类别(如银行),一个用于地点(如纽约)

如果我指定了任何一个过滤器,并且如果我指定了所有3个过滤器,那么如何链接查询以使其呈现适当的结果?如果我指定了所有3个过滤器,则应执行and。我试着用if else来做,但是时间太长了。还有别的办法吗

这是我的密码:

views.py

 if request.method == "POST":
        internship_desc = request.POST['internship_desc']
        internship_ind = request.POST['internship_industry']
        internship_loc = request.POST['internship_location']

        results = []
    
    
       if internship_desc != "" and internship_desc is not None:
            query_results = Internship.objects.filter(
                Q(internship_title__icontains=internship_desc) |
                Q(internship_desc__icontains=internship_desc) |
                Q(recruiter__company_name__icontains=internship_desc)
            )
    
        if internship_ind !="" and internship_ind is not None:
             if internship_desc != "" and internship_desc is not None:
                query_results = query_results.objects.filter(
                industry_type__iexact=internship_ind)
        else:
            query_results = Internship.objects.filter(industry_type__iexact=internship_ind)

        if internship_loc !="" and internship_loc is not None:
            if internship_desc != "" and internship_desc is not None and internship_ind !="" 
               and internship_ind is not None:
                 query_results = query_results.objects.filter(
                 industry_type__iexact=internship_ind)

            query_results = query_results.objects.filter(
            recruiter__company_region__iexact=internship_loc)

我想这就是你想要做的

result = Internship.objects.all()
if internship_desc:
    result = result.filter(internship_desc__icontains=internship_desc)
if internship_ind:
    result = result.filter(industry_type__iexact=internship_ind)
if internship_loc:
    result = result.filter(recruiter__company_region__iexact=internship_loc)

我想这就是你想要做的

result = Internship.objects.all()
if internship_desc:
    result = result.filter(internship_desc__icontains=internship_desc)
if internship_ind:
    result = result.filter(industry_type__iexact=internship_ind)
if internship_loc:
    result = result.filter(recruiter__company_region__iexact=internship_loc)

您最好使用
django_过滤器
进行此类过滤

import django_filters

class InternshipFilter(django_filters.FilterSet):

    company_name = django_filters.CharFilter(
        field_name='recruiter__company_name',
        lookup_expr='icontains'
    )

    class Meta:
        model = Internship
        fields = {
            'internship_title': ['icontains'],
            'internship_desc': ['icontains'],
        }
并按如下方式将其传递给模板:

context['filter_form'] = InternshipFilter().form
并在视图中使用它返回过滤后的对象:

InternshipFilter(self.request.GET, queryset=Internship.objects.all()).qs

更多信息

您最好使用
django_过滤器
进行此类过滤

import django_filters

class InternshipFilter(django_filters.FilterSet):

    company_name = django_filters.CharFilter(
        field_name='recruiter__company_name',
        lookup_expr='icontains'
    )

    class Meta:
        model = Internship
        fields = {
            'internship_title': ['icontains'],
            'internship_desc': ['icontains'],
        }
并按如下方式将其传递给模板:

context['filter_form'] = InternshipFilter().form
并在视图中使用它返回过滤后的对象:

InternshipFilter(self.request.GET, queryset=Internship.objects.all()).qs

更多信息

@E保罗,谢谢!这很简单。我试了更长的时间way@E保罗,谢谢!这很简单。我试了更长的时间way@Poonya,谢谢但不太习惯使用表格:)@Poonya,谢谢但不太习惯使用表格:)