如何在django rest框架中获得多对多字段过滤器?
我想过滤我的数据,比如如何在django rest框架中获得多对多字段过滤器?,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,我想过滤我的数据,比如localhost:8000/api/1/deliveries/report/?user=1,2Many-to-Many字段我不想只过滤一个字段,但我无法帮助我 这里是视图.py class ReportView(generics.ListCreateAPIView): queryset = Delivery.objects.all() serializer_class = serializers.DeliverySerializer filter
localhost:8000/api/1/deliveries/report/?user=1,2
Many-to-Many字段我不想只过滤一个字段,但我无法帮助我
这里是视图.py
class ReportView(generics.ListCreateAPIView):
queryset = Delivery.objects.all()
serializer_class = serializers.DeliverySerializer
filter_backends = [DjangoFilterBackend]
filter_fields = {
'too': ['lte'],
'fromm': ['gte'],
'electric_bike': ['exact'],
'mode': ['exact'],
'user': ['exact'],
}
class ReportSerializer(serializers.ModelSerializer):
class Meta:
model = Delivery
fields = '__all__'
这里是Serializer.py
class ReportView(generics.ListCreateAPIView):
queryset = Delivery.objects.all()
serializer_class = serializers.DeliverySerializer
filter_backends = [DjangoFilterBackend]
filter_fields = {
'too': ['lte'],
'fromm': ['gte'],
'electric_bike': ['exact'],
'mode': ['exact'],
'user': ['exact'],
}
class ReportSerializer(serializers.ModelSerializer):
class Meta:
model = Delivery
fields = '__all__'
我只得到一个用户过滤器http://localhost:8000/api/1/deliveries/report/?user=1
像这样这在以下章节中进行了解释:
这是用于创建查找中筛选器的基类。该筛选器类应与另一个筛选器类一起使用,因为该类仅验证传入值是否以逗号分隔。然后使用辅助过滤器验证各个值
因此,您应该定义一个过滤器类:
#filters.py
类别NumberFilter(BaseFilter、NumberFilter):
通过
类报告过滤器(过滤器集):
user=NumberInFilter(字段\u name='user',查找\u expr='in')
类元:
模型=交付
#你应该把你现有的过滤器放在这里
字段={
'too':['lte'],
'fromm':['gte'],
“电动自行车”:[准确的],
“模式”:[“精确”],
}
然后在视图集中使用它:
#views.py
类ReportView(generics.ListCreateAPIView):
queryset=Delivery.objects.all()
serializer\u class=serializers.DeliverySerializer
过滤器\后端=[DjangoFilterBackend]
filterset_class=ReportFilter
使用筛选器类更灵活,因为您可以实现更高级的逻辑和行为。这在以下部分中进行了说明:
这是用于创建查找中筛选器的基类。该筛选器类应与另一个筛选器类一起使用,因为该类仅验证传入值是否以逗号分隔。然后使用辅助过滤器验证各个值
因此,您应该定义一个过滤器类:
#filters.py
类别NumberFilter(BaseFilter、NumberFilter):
通过
类报告过滤器(过滤器集):
user=NumberInFilter(字段\u name='user',查找\u expr='in')
类元:
模型=交付
#你应该把你现有的过滤器放在这里
字段={
'too':['lte'],
'fromm':['gte'],
“电动自行车”:[准确的],
“模式”:[“精确”],
}
然后在视图集中使用它:
#views.py
类ReportView(generics.ListCreateAPIView):
queryset=Delivery.objects.all()
serializer\u class=serializers.DeliverySerializer
过滤器\后端=[DjangoFilterBackend]
filterset_class=ReportFilter
使用筛选器类更灵活,因为您可以实现更高级的逻辑和行为。它不像brother@JayVasant那样工作。它不像brother@JayVasant那样工作