将DRF分页与ListSerializer一起使用会导致异常

2024-05-14 00:04:39 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是当我在DRF上使用ListSerializerpagination一起使用时,我得到了异常。在

我有以下代码

serializers.py

class IsDeletedFilteredListSerializer(serializers.ListSerializer):
    def to_representation(self, data):
        data = data.filter(is_deleted=False)
        return super(IsDeletedFilteredListSerializer, self).to_representation(data)


class GallerySerializer(serializers.ModelSerializer):
    class Meta:
        model = Gallery
        list_serializer_class = IsDeletedFilteredListSerializer  


class ProductSerializer(serializers.ModelSerializer):
    galleries = GallerySerializer(many=True, read_only=True)

    class Meta:
        model = Product
        list_serializer_class = IsDeletedFilteredListSerializer

views.py

^{pr2}$

当我尝试购买产品时:

'list' object has no attribute 'filter'

但是当我把paginate_by = 20去掉,一切都正常。 似乎分页发生在ListFilter之前,并将queryset转换为list。在

因为我使用Django Admin interface,所以更改ObjectManager是不合适的,而且我使用nested serializers重写视图上的queryset也不起作用(过滤器产品和嵌套的库不会过滤)。在

I'm using Django 1.8.6 with DRF 3.1.3 on Python 3.4


Tags: topyselfdatafiltermetadrflist
1条回答
网友
1楼 · 发布于 2024-05-14 00:04:39

您可以通过在get_queryset中过滤您的Products并使用IsDeletedFilteredListSerializer来只过滤你的{}。在

你可以这样做:

class ProductView(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    http_method_names = ['get', 'post', 'head','patch']
    paginate_by = 20

    def get_queryset(self):
        return Product.objects.filter(is_deleted=False)

并在您的ProductSerializer中删除序列化程序元类中的list_serializer_class选项。在

^{pr2}$

这样您就可以同时过滤products和{}

相关问题 更多 >