【问题标题】:multi-filter search in django not workingdjango中的多过滤器搜索不起作用
【发布时间】:2026-02-24 02:45:01
【问题描述】:

有 3 个过滤器,即描述、类别和位置。对于描述,我想按公司名称、职位名称或职位描述搜索职位。 即使用户输入“公司名称和职位”,我也应该检索到正确的匹配,但不是完全匹配,而是有点接近。我怎么得到这个?

models.py

 class Internship(models.Model):

     recruiter = models.ForeignKey(Recruiter, on_delete=models.SET_NULL, null=True)
     internship_title = models.CharField(max_length=100)
     internship_mode = models.CharField(max_length=20, choices=MODE_CHOICES)
     industry_type = models.CharField(max_length=200)
     internship_desc = RichTextField()

 class Recruiter(models.Model):

     user = models.ForeignKey(User,on_delete=models.CASCADE)
     company_name = models.CharField(max_length=100)

views.py

def user_search_internship(request):
    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:
        query_results = Internship.objects.filter(
            industry_type__iexact=internship_ind)

    if internship_loc !="" and internship_loc is not None:
        query_results = Internship.objects.filter(
            recruiter__company_region__iexact=internship_loc)

    if query_results:
        for internship in query_results:
            print(internship)
    context = {
            'query_results': query_results,
    }

    return render(request, 'internship_search_results.html', context)

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    您可以使用Q 对象对过滤器进行or 操作:

        internships = internships.filter(
            Q(internship_title__icontains=internship_desc) |
            Q(internship_desc__icontains=internship_desc) |
            Q(recruiter__company_name__icontains=internship_desc)
        )
    

    【讨论】:

    • 如果是有特定位置和类别的公司怎么办?
    • 嗯,你必须知道一些关于用户输入字符串的知识,这样你才能解析它(就像一个预定义的模式)。如果您只是得到一个原始字符串并且不知道该字符串的结构,您可以尽力而为并通过搜索多个字段来返回相关记录。
    • 谢谢你的回答! :) 有用。位置和行业类型存在一些问题
    • 不客气:) 这适用于所有字段,您的过滤定义中可能存在错误,请再次检查并注意___
    • 你能检查一下我的做法是否正确吗?