diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index ab42fc605..2911265a9 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -164,6 +164,9 @@ def get_field_kwargs(field_name, model_field): # EmailField does not need to include the validate_email argument, # as it is explicitly added in. if isinstance(model_field, models.EmailField): + custom_message = model_field.error_messages.get("invalid", None) + if custom_message is not None: + kwargs.setdefault('error_messages', {}).update(invalid=custom_message) validator_kwarg = [ validator for validator in validator_kwarg if validator is not validators.validate_email diff --git a/tests/test_validators.py b/tests/test_validators.py index 098bb4aff..7b4d9b654 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -2,7 +2,7 @@ import datetime import pytest from django.core.validators import ( - EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator, + MaxLengthValidator, MaxValueValidator, MinLengthValidator, MinValueValidator, URLValidator ) from django.db import DataError, models @@ -612,7 +612,9 @@ class ValidatorMessageTests(TestCase): def test_email_validator_message_is_copied_from_model(self): class UserModel(models.Model): - email = models.EmailField(validators=[EmailValidator(message='Please enter a valid email.')]) + email = models.EmailField( + error_messages={"invalid": "Please enter a valid email."} + ) class UserSerializer(serializers.ModelSerializer): class Meta: