如何部分使用序列化器

时间:2018-08-13 04:25:35

标签: django serialization django-rest-framework

我有几个视图集,其中的多个端点使用一个串行器。一个端点甚至没有Meta类, 它执行某种操作,并在to_representation方法中使用相同的序列化器。在此序列化程序中,我使用如下方法字段:

some_field = serializers.SerializerMethodField()
def get_some_field(self, obj):
    return bool(obj.something_attr)

something_attr我进入

的视图集
 queryset =MyModel.objects.annotate(something_attr=(...))

在其他视图集中,没有这样的字段,因此他们使用其他查询集。我是否可以解决此问题,而无需创建大量其他序列化程序。多谢!

1 个答案:

答案 0 :(得分:2)

据我了解,您正在尝试使用具有不同视图的单个序列化器类-但每个视图都需要不同的字段,对吗?

>>> import imageio
>>> img = imageio.imread('img.jpg')
>>> img.dtype
dtype('uint8')
>>> imageio.imwrite('img_saved.jpg', img)
>>> img_read = imageio.imread('img_saved.jpg')
>>> img_read.dtype
dtype('uint8')

您可以使用此mixin为单个序列化程序类的每个视图动态定义字段。只需传递class DynamicFieldSerializerMixin: def __init__(self, *args, **kwargs): fields = kwargs.pop('fields', None) super().__init__(*args, **kwargs) if fields is not None: # Drop any fields that are not specified in the `fields` argument. allowed = set(fields) existing = set(self.fields) for field_name in existing - allowed: self.fields.pop(field_name) 关键字参数和字段名列表即可。