如何在 DRF 中使用 django-filter
How to use django-filter in DRF
在这里你可以看到我带过滤器的观点
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Ad
fields = ['min_price', 'max_price']
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
filter_class = ProductFilter
在下方查找我的此视图的网址 class
urlpatterns = [
path('api/v1/tag/select?', FindByTag.as_view())
]
最后是我的序列化程序
class AdDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Ad
fields = '__all__'
所以,主要问题是我向
发送了一个 GET 请求
http://localhost:8000/api/v1/tag/select?max_price=10000
并从我的 postgres 数据库接收所有记录,过滤器不起作用,有人可以解释为什么吗?随意回答。
Integration with Django Rest Framework is provided through a
DRF-specific FilterSet
and a filter backend. These may be found in the
rest_framework sub-package
直接使用filterset
过滤
需要指定django-filters
提供的filter_backend
from django_filters import rest_framework as filters
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
<b>filter_backends = (filters.DjangoFilterBackend,)
filterset_class = ProductFilter</b>
编辑
class ProductFilter(django_filters.FilterSet):
<b>min_price = django_filters.NumberFilter(field_name="price", lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name="price", lookup_expr='lte')</b>
在这里你可以看到我带过滤器的观点
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Ad
fields = ['min_price', 'max_price']
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
filter_class = ProductFilter
在下方查找我的此视图的网址 class
urlpatterns = [
path('api/v1/tag/select?', FindByTag.as_view())
]
最后是我的序列化程序
class AdDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Ad
fields = '__all__'
所以,主要问题是我向
发送了一个 GET 请求http://localhost:8000/api/v1/tag/select?max_price=10000
并从我的 postgres 数据库接收所有记录,过滤器不起作用,有人可以解释为什么吗?随意回答。
Integration with Django Rest Framework is provided through a DRF-specific
FilterSet
and a filter backend. These may be found in the rest_framework sub-package
直接使用filterset
过滤
django-filters
提供的filter_backend
from django_filters import rest_framework as filters
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
<b>filter_backends = (filters.DjangoFilterBackend,)
filterset_class = ProductFilter</b>
编辑
class ProductFilter(django_filters.FilterSet):
<b>min_price = django_filters.NumberFilter(field_name="price", lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name="price", lookup_expr='lte')</b>