首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django中链接多特征搜索

如何在Django中链接多特征搜索
EN

Stack Overflow用户
提问于 2021-06-06 03:44:57
回答 2查看 31关注 0票数 0

我对一份工作进行了3次筛选搜索。一个是职位/描述/公司,一个是银行业的工作类别,一个是纽约的地点

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

下面是我的代码:

views.py

代码语言:javascript
复制
 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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-06 04:43:59

我想这就是你想要做的。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2021-06-06 05:18:39

您最好的选择是使用django_filters进行这种过滤。

代码语言:javascript
复制
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'],
        }

并将其传递给模板,如下所示:

代码语言:javascript
复制
context['filter_form'] = InternshipFilter().form

并在视图中使用它来返回已过滤的对象:

代码语言:javascript
复制
InternshipFilter(self.request.GET, queryset=Internship.objects.all()).qs

更多信息here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67853378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档