diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index 1b63833688..df3851d353 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -461,7 +461,7 @@ class User(AbstractUser): Username, password and email are required. Other fields are optional. """ - class Meta: + class Meta(AbstractUser.Meta): swappable = 'AUTH_USER_MODEL' diff --git a/django/contrib/auth/tests/basic.py b/django/contrib/auth/tests/basic.py index 097bc90451..ec94fe5b46 100644 --- a/django/contrib/auth/tests/basic.py +++ b/django/contrib/auth/tests/basic.py @@ -12,6 +12,7 @@ from django.core.exceptions import ImproperlyConfigured from django.core.management import call_command from django.test import TestCase from django.test.utils import override_settings +from django.utils import translation from django.utils.encoding import force_str from django.utils.six import binary_type, PY3, StringIO @@ -232,3 +233,13 @@ class BasicTestCase(TestCase): "The current user model must point to an installed model" with self.assertRaises(ImproperlyConfigured): get_user_model() + + @skipIfCustomUser + def test_user_verbose_names_translatable(self): + "Default User model verbose names are translatable (#19945)" + with translation.override('en'): + self.assertEqual(User._meta.verbose_name, 'user') + self.assertEqual(User._meta.verbose_name_plural, 'users') + with translation.override('es'): + self.assertEqual(User._meta.verbose_name, 'usuario') + self.assertEqual(User._meta.verbose_name_plural, 'usuarios')