【问题标题】:Validate a field based on outcome of other field validations in Django Rest Framework根据 Django Rest Framework 中其他字段验证的结果验证字段
【发布时间】:2020-08-04 20:51:52
【问题描述】:

我有以下serializers.py 文件:

from rest_framework import serializers

class SampleSerializer(serializers.Serializer):
    name = serializers.CharField(allow_blank=False,required=True)
    initials = serializers.CharField(allow_blank=False,required=True)

    def validate_initials(self,data):
        if len(data) > 10:
            raise serializers.ValidationError("Length of initials is too long")

    

除非提供了name,否则我想阻止调用validate_initials()。换句话说,只有当name 的验证通过时,它才能验证initials

如何在序列化程序验证中实现这样的层次结构?

【问题讨论】:

    标签: python django django-rest-framework django-serializer


    【解决方案1】:

    您可以在.validate(…) method [drf-doc] 中实现此功能。这将在成功验证单个字段时运行:

    class SampleSerializer(serializers.Serializer):
        name = serializers.CharField(allow_blank=False,required=True)
        initials = serializers.CharField(allow_blank=False,required=True)
    
        def validate(self,data):
            if len(data['initials']) > 10:
                raise serializers.ValidationError('Length of initials is too long')
            return super().validate(data)

    您还可以包含更复杂的验证,例如检查两个字段是否一起满足某个约束。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多