gpt4 book ai didi

validation - Django Rest Framework 自定义验证错误

转载 作者:行者123 更新时间:2023-12-04 14:44:00 24 4
gpt4 key购买 nike

我正在尝试为帐户模型自定义 DRF (3.x) 的默认验证错误。
我的目标是编写一个验证函数,以便发回自定义的错误消息。

我尝试了以下方法:

class AccountSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=False)

class Meta:
model = Account
fields = ('id', 'email', 'password',)

def validate_password(self, value):
"""
Validate Password.
"""
if not value:
raise serializers.ValidationError("Password cannot be empty!")
elif len(value) < 5:
raise serializers.ValidationError("Password to short...")
return value

长度验证工作正常,但永远不会抛出“密码为空”验证,因为之前抛出了默认错误 ('password', [u'This field may not be blank.'])。

是否有任何选项可以禁用默认错误或首先通过我的自定义函数强制验证?

感谢帮助!

最佳答案

您可以通过设置 the error_messages argument 在每个字段的基础上覆盖验证错误。初始化字段时。您需要传递一个字典,其中键是错误消息名称,值是错误消息的自定义文本。

在您的情况下,您希望实现两条错误消息: required min_length .您可能还需要覆盖 blank ,这会触发您当前的错误,除非您设置 allow_blank=True在球场上。

因此,通过这些更改,您的序列化程序将变成

class AccountSerializer(serializers.ModelSerializer):
password = serializers.CharField(
write_only=True,
required=False,
min_length=5,
error_messages={
"blank": "Password cannot be empty.",
"min_length": "Password too short.",
},
)

class Meta:
model = Account
fields = ('id', 'email', 'password', )

我已经更换了你的 len查看 the min_length argument在密码字段上。

这会将您的所有验证卸载到 Django REST 框架,这将使将来的升级更容易。您仍然可以覆盖 validate_password如果你需要额外的自定义验证,但现在我已经删除了它,因为它是空的。

关于validation - Django Rest Framework 自定义验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28029933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com