我已经制作了RawMeasurementSerializer
和RawMeasurementListSerializer
(子类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)
这很有效,但对我来说并不感到愚蠢!
谢谢,保罗
答案 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