Django Rest Framework - 从相关对象中排除字段

时间:2013-11-24 22:44:03

标签: django-rest-framework

我有两个相关的模型和序列化器。当我序列化其中一个模型(序列化程序的深度为1)时,结果包括来自相关对象的一些不应该可见的字段。我如何指定用于关系的序列化程序?或者有没有告诉Rest Framework从相关对象中排除某些字段?

谢谢,

2 个答案:

答案 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')