是否可以使用django-rest-framework 3.x`ListSerializer`而不覆盖`get_serializer`?

时间:2015-03-02 16:32:40

标签: django django-rest-framework

我已经制作了RawMeasurementSerializerRawMeasurementListSerializer(子类ListSerializer),这些都按预期工作。

文档说我不应该直接使用ListSerializer,而是使用many=True参数实例化奇异序列化器。

所以我在视图中被迫覆盖get_serializer

class RawMeasurements(CreateAPIView):                                            

    def get_serializer(self, *args, **kwargs):
        serializer_class = RawMeasurementSerializer
        kwargs['context'] = self.get_serializer_context()
        return RawMeasurementSerializer(many=True, *args, **kwargs)

这与generics.py中的DRF实施基本相同,many=True。我宁愿不在可能的情况下重新实施DRF。

有没有更好的方法,我可以这样做吗?

class RawMeasurements(CreateAPIView):                                            
    serializer_class = RawMeasurementSerializer
    use_list_serializer = True

到目前为止,我最好的尝试是:

from functools import partial

class RawMeasurements(CreateAPIView):                                            
    serializer_class = partial(RawMeasurementSerializer, many=True)

这很有效,但对我来说并不感到愚蠢!

谢谢,保罗

1 个答案:

答案 0 :(得分:-1)

如何在GenericAPIView中重写get_serializer_class

from functools import partial

class SetManyMixin:
    def get_serializer_class(self, *args, **kwargs):
        serializer_class = super().get_serializer_class(*args, **kwargs)
        return partial(serializer_class, many=True)

然后使用mixin类:

class RawMeasurements(SetManyMixin, CreateAPIView):                                            
    serializer_class = RawMeasurementSerializer