【问题标题】:How to filter on a field for a set of values如何过滤一组值的字段
【发布时间】:2020-03-30 04:58:47
【问题描述】:

我有一个名为 products 的模型。 类别属于此模型。现在我可以用一个值过滤这个部分字段。其实我想通过多个值过滤同一个字段

示例:如果我使用 phone(是一个类别)进行过滤,它可以工作 但是对于这个部分字段,我需要按 phonecases

进行过滤

过滤器

class ProductFilter(filters.FilterSet):
    min_price = filters.NumberFilter(field_name="price", lookup_expr='gte')
    max_price = filters.NumberFilter(field_name="price", lookup_expr='lte')

    class Meta:
        model = Product
        fields = ['category',
                  'min_price', 'max_price'
                  ]

查看

class ProductListView(generics.ListAPIView):
    permission_classes = [IsAuthenticated]
    queryset = Product.objects.all()
    serializer_class = ProductListSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = ProductFilter

我该怎么做? 有人可以帮我吗?

【问题讨论】:

    标签: django python-3.x django-rest-framework serialization


    【解决方案1】:

    定义 CharFilter 并指定 lookup_expr 参数,

    class ProductFilter(filters.FilterSet):
        min_price = filters.NumberFilter(field_name="price", lookup_expr='gte')
        max_price = filters.NumberFilter(field_name="price", lookup_expr='lte')
        category = filters.CharFilter(lookup_expr='in')
    
        class Meta:
            model = Product
            fields = ['category', 'min_price', 'max_price']

    【讨论】:

      【解决方案2】:

      类 UserFilter(django_filters.FilterSet):

      first_name = django_filters.CharFilter(lookup_expr='icontains')
      year_joined = django_filters.NumberFilter(name='date_joined', lookup_expr='year')
      year_joined__gt = django_filters.NumberFilter(name='date_joined', lookup_expr='year__gt')
      year_joined__lt = django_filters.NumberFilter(name='date_joined', lookup_expr='year__lt')
      class Meta:
          model = User
          fields = ['username', 'first_name', 'last_name', ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-27
        • 1970-01-01
        • 2018-11-06
        相关资源
        最近更新 更多