django 中的多过滤器搜索不起作用

multi-filter search in django not working

有 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)

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

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