【问题标题】:Django Q filter foreign keyDjango Q过滤外键
【发布时间】:2020-12-08 19:32:21
【问题描述】:

我正在尝试创建一个从两个字段中获取输入并同时使用这两个字段进行搜索的搜索。我知道如何过滤非外键,但尝试过滤外键会出现错误“相关字段查找无效:​​国家/地区”

我希望作业返回过滤查询和国家/地区的结果。我怎样才能最好地做到这一点?

型号:

  class Job(models.Model):
            title = models.CharField(max_length=50)
             ...
            country = models.ForeignKey(
                          Country,
                          blank=True,
                          null=True,
                          help_text="Select if you're hiring within a specific "
                                    "country",
                          on_delete=models.PROTECT
                      )

查看:

def jobs_search(request):
    form = SearchForm(request.GET)
    if form.is_valid():
        cd = form.cleaned_data
        jobs = Job.objects.filter(site_id=get_current_site(request).id) \
                          .filter(paid_at__isnull=False) \
                          .filter(expired_at__isnull=True) \
                          .filter(
                              Q(title__icontains=cd['query'], ) |
                              Q(description__icontains=cd['query']) & Q(country__country__icontains=cd['country'])
                          ) \
                          .order_by('-paid_at')

        meta_desc = 'Search Results'
        title = 'Search Results'
        context = {'meta_desc': meta_desc,
                   'title': title,
                   'form': form,
                   'jobs': jobs}

        return render(request, 'job_board/jobs_index.html', context)

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以试试这个

    from django.db.models import Q
    import operator
    
    jobs = Job.objects.all()
    query = reduce(operator.and_, [ Q(author__name__icontains=x) for x in jobs ] )
    jobsfilter = jobs.filter( query )
    

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2012-01-23
      • 1970-01-01
      • 2018-01-05
      • 2013-09-05
      • 2016-07-12
      • 2013-09-04
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多