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 に答える