python - django 表单验证 - 验证错误自定义消息不起作用
问题描述
这是一个 Django 休息项目,我正在创建一个用户注册表单。我为用户名写了一个验证,如下所示,但我的自定义验证错误没有显示,它显示如下默认消息......我该如何解决这个问题?
def validate_username
我的另一个问题是:和之间有什么区别def clean_username
谢谢你
这是默认的 Django 消息:
"{
"username": [
"A user with that username already exists."
]
}
"
这是我的看法:
class UserRegisterApiView(CreateAPIView):
permission_classes = [AllowAny]
serializer_class = UserRegisterSerializer
queryset = User.objects.all()
这是我的序列化器:
class UserRegisterSerializer(ModelSerializer):
#email2 = EmailField(label='confirm email')
email = EmailField(label='email', )
class Meta:
model = User
fields = [
'username',
'first_name',
'email',
'password',
]
extra_kwargs = {
"password": {
"write_only": True
}
}
# check if the user name is taken
def validate_username(self, value):
username = value
qs = User.objects.filter(username=username)
if qs.exists():
raise ValidationError("این نام کاربری آزاد نمیباشد")
return value
解决方案
唯一的消息来自以下模型:
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
在您的情况下,您需要在序列化程序中重写用户名的 UniqueValidator。
class UserRegisterSerializer(ModelSerializer):
def __init__(self, *args, **kwargs):
super(UserRegisterSerializer, self).__init__(*args, **kwargs)
for validator in self.fields['username'].validators:
from rest_framework.validators import UniqueValidator
if type(validator) == UniqueValidator:
validator.message = 'این نام کاربری آزاد نمیباشد'
推荐阅读
- c# - 将相同的事件应用于 C# 中的每个项目按钮
- amazon-dynamodb - AWS Appsync - 查询 DynamoDB 的空索引
- python-3.x - 避免张量流中的 ctc_loss 无穷大
- mysql - 使用 MySQL 和 PHP 为学生分配职位
- excel - 如何在 Excel 中计算分钟数组?
- php - 通过在 PHP 中组合两个图像来创建图像
- groovy - 可以直接引用使用@Builder 声明的构建器类吗?
- r - 尝试添加新列时`找不到函数“get <-”`
- ionic-framework - Ionic 框架 3 - 在上一页检测“返回”事件
- db2 - DB2 查询不返回具有 NULL 列值的行