3

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

# 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
4

1 回答 1

1

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

看一下“GenericAPIView”的实现,特别是“filter_queryset”方法来了解如何去做。

于 2013-05-30T09:56:24.933 回答