python - 序列化程序验证函数未调用 DRF

标签 python django api django-rest-framework

class ChildSerializer(serializers.ModelSerializer):


    class Meta:
         model = Child
         fields = '__all__'


class ParentSerializer(serializers.ModelSerializer):
    """
    Serializer for task
    """
    def validate_title(self, data):
        if not data.get('title'):
            raise serializers.ValidationError('Please set title')
        return data

在 Post 时不调用验证函数,还有我如何给 ChildSerializer 自定义错误,

最佳答案

我遇到了一个类似的问题,我的自定义验证字段没有被调用。我写它是为了绕过不正确的 DRF 验证(下面显示了更多详细信息,但不是答案所必需的)。

查看 DRF 源代码后,我发现了我的问题:DRF 总是先使用其代码验证您的字段,然后再使用您的自定义代码进行验证。

''' rest-framework/serializers.py '''

for field in fields:
    validate_method = getattr(self, 'validate_' + field.field_name, None)
    primitive_value = field.get_value(data)
    try:
        # DRF validation always runs first!
        # If DRF validator throws, then custom validation is not called
        validated_value = field.run_validation(primitive_value)
        if validate_method is not None:
            # this is your custom validation
            validated_value = validate_method(validated_value)
    except ValidationError as exc:
        errors[field.field_name] = exc.detail
    except DjangoValidationError as exc:
        errors[field.field_name] = get_error_detail(exc)

回答:自定义验证器不能用于绕过 DRF 的验证器,因为它们总是先运行并在您说它有效之前引发异常。

(对于那些感兴趣的人,我遇到的验证错误是这样的:ModelSerializer used for ModelA,它与 ModelB 具有 OneToOne 关系。ModelB 的 pk 有一个 UUID。DRF 抛出错误 '53abb068-0286- 411e-8729-0174635c5d81' 不是有效的 UUID。 验证时,这是不正确的,真令人气愤。)

关于python - 序列化程序验证函数未调用 DRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49400426/

相关文章:

php - 使用 youtube api v3 验证视频是否存在

javascript - 为什么指令中的值没有得到更新 - Angular Js?

python - 如何在句子中找到与 python 中的单词相反的单词

python - 从模块或类内部启动多处理,而不是从 main() 启动

python - Django 身份验证和权限 : Snippets visible only to the creator

python - Django 服务构建有许多 MIME 类型错误(sveltekit)

python - 使用 Python 创建并保存战舰游戏的文本文件

python - svm.sparse.SVC 需要花费大量时间进行训练

mysql - 如何在 MySQL 中创建一个字段,从 Django 中的可调用函数获取数据?

rest - Azure 管理 REST API - "Authentication failed. The ' 授权 header 以无效格式提供。”