這是我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