这是我UserSerializer(我使用的是默认的Django用户模型):定制ModelSerializer错误信息被忽略
class UserSerializer(SetCustomErrorMessagesMixin, serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super(UserSerializer, self).__init__(*args, **kwargs) # call the super()
for field in self.fields: # iterate over the serializer fields
self.fields[field].error_messages['required'] = 'Enter a valid %s.'%field
self.fields[field].error_messages['null'] = 'Enter a valid %s.'%field
# class CharField(Field) errors
self.fields[field].error_messages['blank'] = 'Enter a valid %s.'%field
self.fields[field].error_messages['max_length'] = '%s cannot have more than {max_length} characters.'%field
self.fields[field].error_messages['min_length'] = '%s cannot have less than {min_length} characters.'%field
class Meta:
model = User
fields = ('username', 'password', 'email',)
的问题是,当用户输入一个用户名是太长,错误消息是
"Username is too long."
此错误消息来自哪里?我在上面的代码中覆盖了“max_length”错误消息,但它没有显示它。当我从UserSerialzer删除这一行:
self.fields[field].error_messages['max_length'] = '%s cannot have more than {max_length} characters.'%field
那么错误信息是:
"Ensure this field has no more than 30 characters."
这是有道理的beause它从CharField DRF源代码来这里:https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/fields.py
但“用户名太长”。来自并且怎么没有说“用户名不能超过{max_length}个字符。”代替?
'field'来自'__init__'哪里? – Ivan
@Ivan对不起,当复制粘贴我的代码时,我不小心删除了这一行:“for self in field.fields:”。我编辑了我的帖子,现在添加了该行。它更有意义吗? – user2719875
你正在使用什么版本的Django和DRF? – Ivan