如何在Django中链接多功能搜索
我有一个3过滤搜索工作。一个用于职位/说明/公司,一个用于工作类别(如银行),一个用于地点(如纽约) 如果我指定了任何一个过滤器,并且如果我指定了所有3个过滤器,那么如何链接查询以使其呈现适当的结果?如果我指定了所有3个过滤器,则应执行and。我试着用if else来做,但是时间太长了。还有别的办法吗 这是我的密码: views.py如何在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
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,谢谢但不太习惯使用表格:)