这是我的 UserSerializer(我使用的是默认的 Django User 模型):
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."
这是有道理的,因为它来自 CharField DRF 源代码:https ://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/fields.py
但是“用户名太长”在哪里。来自以及为什么它没有说“用户名不能超过 {max_length} 个字符。” 反而?