Django Rest Framework:允许创建序列化器字段,但不能编辑

uba*_*dub 6 python django python-3.x django-rest-framework

现在,DRFread_onlySerializer构造函数上的参数意味着您既不能创建也不能更新字段,而构造write_only函数上的参数Serializer允许创建或更新字段,但在序列化表示时阻止输出字段。

是否有任何(优雅的)方法Serializer可以在创建有问题的模型时(在create()上调用 时Serializer)创建一个可以创建一次的字段,但以后不能通过修改update

注意:是的,我已经看到了这个解决方案,但老实说,我觉得它丑陋且不符合 Pythonic。有没有更好的办法?

Ykh*_*Ykh 6

class TodoModifySerializer(ModelSerializer):

    def to_internal_value(self, data):
        data = super(TodoModifySerializer, self).to_internal_value(data)
        if self.instance:
            # update
            for x in self.create_only_fields:
                data.pop(x)
        return data

    class Meta:
        model = Todo
        fields = ('id', 'category', 'title', 'content')
        create_only_fields = ('title',)
Run Code Online (Sandbox Code Playgroud)

您可以to_internal_value通过在更新时删除此数据来实现