【问题标题】:How to query a list django如何查询列表django
【发布时间】:2021-06-27 08:05:16
【问题描述】:
def get_queryset(self):
    result = Tenants.objects.all()
    filters = self.request.GET.get('filter')

    if filters is not None:
        filters = filters[1] if filters[1] == ',' else filters
        filters_list = filters.split(',')
        filter_result = Tenants.objects.none()
        for value in filters_list:
            filter_result = filter_result | result.filter(Q(business_type__icontains=value)
            |Q(category__icontains=value))
        return filter_result
    
    return result.all()

这里我希望查询参数是 business_type 和 category 当使用 get 方法并检查数据时,我只能过滤一个字段,business_type 或 category

当使用过滤器两次时 /?page=1&filter=business_type&filter=category 然后我得到我想要的数据

但是当 url 像这样时我需要数据 /?page=1&filter=business_type,category

【问题讨论】:

  • 您可以在 URL 上使用正则表达式来获取不同的过滤器,或者使用 "," 作为正则表达式拆分来分隔过滤器参数
  • filters = filters[1] if filters[1] == ',' else filters 应该做什么?

标签: python django filter django-rest-framework django-queryset


【解决方案1】:

这里可以使用查找in(Django Docs)过滤business_type__in=filters.split(",")

def get_queryset(self):
    result = Tenants.objects.all()
    filters = self.request.GET.get('filter')

    if filters:
        filter_result = result.filter(business_type__in=filters.split(","))
        return filter_result
    
    return result

【讨论】:

    【解决方案2】:

    您可以通过以下方式查询:

    def get_queryset(self):
        result = Tenants.objects.all()
        filters = self.request.GET.getlist('filter')
        if not filters:
            return Tenants.objects.all()
        Tenants.objects.filter(
            Q(*[
                Q(business_type__icontains=value) | Q(category__icontains=value)
                for filter in filters
                for value in filter.split(',') if value
            ],
            _connector=Q.OR
            )
        )

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2020-02-26
      • 2013-06-07
      • 2012-03-07
      • 2020-03-06
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多