使用serializers.ModelSerializer进行过滤

时间:2013-05-29 20:47:23

标签: python django python-2.7 django-rest-framework

我想在用于序列化查询集的类上使用过滤器。我构建了以下过滤器:

# define a filterset
class commentFilter(django_filters.FilterSet):       
    class Meta:
        model = comment
        fields = ['tag', 'title']

使用通用视图,这可以正常工作,我可以使用:?tag=23

对其进行过滤
# generic view
class CommentsAll(generics.ListAPIView):
    model = comment
    serializer_class = CommentSerializer
    filter_class = commentFilter        

但是对于非通用视图,我无法使过滤功能起作用(但返回数据)。我能看到的唯一区别是我正在使用serializers.ModelSerializer。有没有一种方法可以对这种类的类进行过滤?我的观点是返回模型数据的查询集,该查询集与通用视图中使用的数据相同。

# non generic
class CommentSerializer(serializers.ModelSerializer):     
    count = serializers.Field(source='subcomments') 
    score = serializers.Field(source='score') 
    upvotes = serializers.Field(source='upvotes')    

    class Meta:     
        model = comment     
        fields = ('title', 'comment', 'tag', 'created', 'count', 'score', 'upvotes',)          

    filter_class = commentFilter

1 个答案:

答案 0 :(得分:1)

通用视图构建了过滤和分页的行为,因为它们可以将该行为挂钩到它们创建和返回数据查询集的标准方式。如果您正在撰写自己的观点,则需要自己应用任何过滤。

看看'GenericAPIView'的实现,特别是'filter_queryset'方法,以了解如何解决这个问题。