我有两个相关的模型和序列化器。当我序列化其中一个模型(序列化程序的深度为1)时,结果包括来自相关对象的一些不应该可见的字段。我如何指定用于关系的序列化程序?或者有没有告诉Rest Framework从相关对象中排除某些字段?
谢谢,
答案 0 :(得分:1)
我认为一种方法是为模型创建一个额外的序列化程序,您只想返回有限数量的字段,然后在另一个模型的序列化程序中使用此序列化程序。像这样:
class MyModelSerializerLimited(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('field1', 'field2') #fields that you want to display
然后在其他序列化程序中使用MyModelSerializerLimited
:
class OtherModelSerializer(serializers.ModelSerializer):
myfield = MyModelSerializerLimited()
class Meta:
model = OtherModel
fields = ('myfield', ...)
depth = 1
答案 1 :(得分:0)
您可以覆盖序列化程序上的restore_fields方法。在restore_fields方法中,您可以修改字段列表 - serializer.fields - 弹出,推送或修改任何字段。
例如:当行动不是“创建”时,字段工作区是read_only
class MyPostSerializer(ModelSerializer):
def restore_fields(self, data, files):
if (self.context.get('view').action != 'create'):
self.fields.get('workspace').read_only=True
return super(MyPostSerializer, self).restore_fields(data, files)
class Meta:
model = MyPost
fields = ('id', 'name', 'workspace')