带源的序列化器字段不存在于 valid_data 中

问题描述 投票:0回答:2

我在带有源的序列化器中添加了一个字段,正在调用其验证函数,但其值不存在于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 的值?

python django django-rest-framework
2个回答
1
投票

由于

required=False
,如果您没有通过它,它不会出现在
attrs
函数中的
validate
中。

如果该实体已存在,您可以使用

self.instance
访问它。因此您可以通过
self.instance.model_field
访问现有价值。


0
投票

source
属性将用作
validated_data
中的键,而不是序列化器字段的名称。

根据您的示例,您需要使用

attrs['model_field']
而不是
attrs['new_name_field']

我不理解这种行为,也无法在 DRF 文档中找到更多信息,但找到了一些相关的实例:

© www.soinside.com 2019 - 2024. All rights reserved.