【发布时间】:2017-10-21 06:04:00
【问题描述】:
我正在尝试使用 django-filters 和 django-rest-framework 来实现基于 get/url/params 的过滤器,但它不适用于 viewsets 并且不会显示错误。例如,如果我使用 generics.ListAPIView,过滤器可以完美运行!我的项目代码:
模型.py
class OrderFeedBack(BaseModel):
"""
Receive the customer rating, vendor and staff feedback about a order.
Once the vendor or the customer has written his feedbacks, they can't change it.
Developer: gcavalcante8808
"""
rating = models.IntegerField()
customer_feedback = models.CharField(max_length=255, null=True, blank=True)
vendor_feedback = models.TextField(null=True, blank=True)
staff_feedback = models.TextField(null=True, blank=True)
order = models.ForeignKey("Order")
locked = models.BooleanField(default=False)
过滤器.py
class OrderFeedBackViewSet(viewsets.ViewSet):
authentication_classes = (TokenAuthentication, SessionAuthentication)
permission_classes = (IsAuthenticated,)
filter_class = (OrderFeedBackFilter,)
filter_backend = (filters.DjangoFilterBackend,)
filter_fields = ('id', 'locked')
search_fields = ('id', 'order',)
def list(self, request):
"""
List all Order Feedbacks.
---
serializer: app.api_v1.serializers.OrderFeedBackSerializer
omit_serializer: false
responseMessages:
- code: 401
message: AuthenticationNeeded
- code: 200
message: List of Feedbacks.
"""
data = OrderFeedBack.objects.all()
serializer = OrderFeedBackSerializer(data, many=True)
return Response(serializer.data)
序列化器.py
class OrderFeedBackSerializer(serializers.ModelSerializer):
order = serializers.PrimaryKeyRelatedField(queryset=Order.objects.all())
class Meta:
model = OrderFeedBack
即使,如果我从“filter_class”中删除 FieldSet 类或尝试使用“filter_class= OrderFeedBackFilter”,它也不会正常工作。我在我的 virtualenv 中安装了以下库(并在我的 settings.py 中安装了 setUp) :
Django==1.8.18
DjangoRestFramework==3.3
Django-Filters==1.0.1
Django-Crispy-Forms
我正在使用 python 2.7。
查看运行服务器日志,也没有错误。 提前致谢。
【问题讨论】:
标签: python django django-rest-framework django-filter