我正在使用DRF 3.2.3並遇到此問題。我有這樣的序列化程序被用於創建用戶(Web應用程序使用自定義的用戶模型):Django rest框架忽略設置在模型上的error_messages
class CreateGRUserSerializer(serializers.ModelSerializer):
confirm_password = serializers.CharField(max_length=128, allow_blank=False,
write_only=True, style={'input_type': 'password'})
def validate(self, data):
if data['password'] != data['confirm_password']:
raise serializers.ValidationError({'password': "Passwords do not match", 'confirm_password': "Passwords do not match"})
return data
class Meta:
model = GRUser
fields = ('username', 'email', 'password', 'confirm_password')
extra_kwargs = {'password': {'write_only': True, 'style': {'input_type': 'password'}}}
def create(self, validated_data):
user = GRUser(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.init_activation(False)
user.save()
return user
問題是,在模型中指定的錯誤信息被完全忽略。例如,電子郵件字段定義這樣的GRUser
模式:
email = models.EmailField(_('email address'), unique=True,
help_text=_('Email address that acts as the primary unique identifier for the user.'),
error_messages={
'unique': _("A user with that email already exists."),
})
當使用可瀏覽API,DRF甚至設法然而獲得並從模型顯示幫助文本,當我輸入一個已經使用電子郵件,而不是"A user with that email already exists"
,我得到了DRF的默認"This field must be unique."
消息。
是否有設計理由爲什麼會發生?我能以某種方式讓DRF使用來自模型的錯誤消息(除了違反DRY原則並在串行器中手動重複其文本的顯而易見的解決方案之外)?