我在带有源的序列化器中添加了一个字段,正在调用其验证函数,但其值不存在于validated_data中。
class MySerializer(serializers.ModelSerializer):
# some fields
new_name_field = serializers.CharField(source='model_field', required=False)
# I have renamed this because I need "new_name_field" on my frontend.
def validate_new_name_field(self, value):
# do validations
return value
def validate(self, attrs):
attrs = super().validate(attrs)
print(attrs['new_name_field']) # This throws KeyError
我做错了什么以及如何在验证函数中获取 new_name_field 的值?
由于
required=False
,如果您没有通过它,它不会出现在attrs
函数中的validate
中。
如果该实体已存在,您可以使用
self.instance
访问它。因此您可以通过self.instance.model_field
访问现有价值。
source
属性将用作validated_data
中的键,而不是序列化器字段的名称。
根据您的示例,您需要使用
attrs['model_field']
而不是 attrs['new_name_field']
。
我不理解这种行为,也无法在 DRF 文档中找到更多信息,但找到了一些相关的实例: