目前,Serializer
构造函数上的DRF read_only
参数意味着您既不能创建也不能更新字段,而Serializer
构造函数上的write_only
参数允许创建或更新字段,但在序列化表示时阻止输出字段。
有没有一种(优雅的)方法可以让Serializer
字段在模型创建时(在Serializer
上调用create()
时)只创建一次,但之后不能通过update
进行修改?
NB:是的,我看过this solution,但老实说,我觉得它很丑,不像Python。有更好的方法吗?
4条答案
按热度按时间gzszwxb41#
字符串
你可以在
to_internal_value
方法中通过在更新时删除此数据来完成此操作oknwwptz2#
通过“不优雅”,我假设你只需要一个序列化器来创建和更新。你可能会考虑重写你的序列化器的
update
方法,并在保存之前从validated_data
中删除create_only_field
:字符串
但是,在更新模型时,您必须提供旧的(或某些)字段值。
ukdjmx9f3#
我不认为有什么,你要么这样指定它,要么自己做一个序列化器,从DRF的序列化器继承。
de90aj5v4#
为了使字段在更新时为REQUIRED和只读,我在字段验证时处理了它。
字符串
您还可以在编辑的情况下将该字段设置为可选的,但您需要将该字段设置为required=False并在validate()方法中进行验证,因为如果未包含在有效负载中,则不会在创建时调用validate_username()。