使用django串行化器验证字段输入

cqoc49vn  于 2023-02-20  发布在  Go
关注(0)|答案(1)|浏览(119)

我的Django模型中有一个字段code,我必须检查输入字符串是否具有以下属性:
1.长度应为5个字符
1.第1个和第2个字符应为字母
1.第3和第4个字符应为数字
1.第5个字符应为E或N
我有一个如下所示的序列化器,它满足第一个条件。

class MyModelSerializer(serializers.ModelSerializer):
    code = serializers.CharField(max_length=5, min_length=5)

    class Meta:
        model = MyModel
        fields = '__all__'

如何满足其余条件?

o2g1uqev

o2g1uqev1#

其余条件可以通过添加自定义验证器和使用regex来满足。

import re

class MyModelSerializer(serializers.ModelSerializer):
    code = serializers.CharField(max_length=5, min_length=5)

    def validate_code(self, value):
        # check if the code matches the required pattern
        pattern = r'^[A-Za-z]{2}\d{2}[EN]$'
        if not re.match(pattern, value):
            raise serializers.ValidationError('Code does not match required format')

        return value

函数validate_code的名称在序列化器中不是强制性的。您可以随意命名它,只要它以单词“validate”开头并接受一个value参数。value参数表示正在验证的字段的值。
下面是关于上面使用的正则表达式模式的一些深入信息。

  • 第一个和第二个字符应为字母 *:[A-Za-z]{2}匹配任意两个字母字符,确保第一个和第二个字符是字母
  • 第3和第4个字符应为数字 *:\d{2}匹配任意两个数字字符,确保第三和第四个字符是数字
  • 第5个字符应为E或N*:[EN]匹配E或N,确保第五个字符为E或N

相关问题