并且面临只读字段的问题假设我有以下serailizer
`class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ['id', 'account_name', 'users', 'created']
read_only_fields = ['account_name']`
其中account_name(在Account模型中,此字段不能为null)设置为read_only,因为我不想在创建后更新其数据,但在使用创建数据时,我在序列化程序中传递了account_name,但它排除了account_name并给出错误“account_name”不能为null
任何人都可以给予我解决这个问题,我如何才能创建一个只读字段不能为空的数据
我已经尝试从read_only_field中删除它,但这样做可以更新account_name,但我不想在创建后更新它
1条答案
按热度按时间8oomwypt1#
看起来您想让字段
account_name
对于create API端点是可写的,但是对于update API是只读的。在这里使用
read_only_fields
是行不通的,因为DRF总是会忽略为请求中的这些字段发送的任何数据。因此,它需要有条件地处理。一种(快速)方法是在
validate(self, attrs)
或validate_account_name(self, value)
方法中处理此问题。例如:如果是一个更新调用,这将基本上为字段分配现有值。
然而,如果你使用的是swagger/openapi之类的文档,这将不会自动反映在文档中。要解决这个问题,你可以在文档中指定请求字段,或者创建两个序列化类(update继承自create method类),并在update类中分配只读字段。然后你需要为它们各自的方法指定合适的序列化类。