如何在DRF中使用django过滤器
在这里你可以看到我的意见与过滤器如何在DRF中使用django过滤器,django,django-rest-framework,get,django-filter,Django,Django Rest Framework,Get,Django Filter,在这里你可以看到我的意见与过滤器 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 M
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
请在下面查找此视图类的我的URL
urlpatterns = [
path('api/v1/tag/select?', FindByTag.as_view())
]
最后是我的序列化程序
class AdDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Ad
fields = '__all__'
所以,主要的问题是我向
http://localhost:8000/api/v1/tag/select?max_price=10000
从我的postgres数据库接收所有记录,过滤器不工作,有人能解释为什么吗?我可以自由回答
与Django Rest框架的集成是通过
特定于DRF的过滤器集
和过滤器后端。这些可以在
rest_框架子包
如果要直接使用filterset
进行过滤,则需要指定由django filters
提供的filter\u后端
from django_filters import rest_framework as filters
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = ProductFilter
从django_过滤器将rest_框架作为过滤器导入
类FindByTag(generics.ListAPIView):
queryset=Ad.objects.all()
序列化程序\u类=加法器序列化程序
filter\u backends=(filters.DjangoFilterBackend,)
filterset_class=ProductFilter
编辑
class ProductFilter(django_filters.FilterSet):
min_price=django_filters.NumberFilter(field_name=“price”,lookup_expr='gte'))
max\u price=django\u filters.NumberFilter(field\u name=“price”,lookup\u expr='lte')
这似乎是答案,但您能对我的url\u模式说些什么呢。我粘贴了您的解决方案,在/api/v1/tag/select\uuuuu init\uuuuuuu()处获取了一个意外的关键字参数'name'@NazarLike edited,对ProductFilter进行了一些修改
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(field_name="price", lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name="price", lookup_expr='lte')