Fixed #19925 - Added validation for REQUIRED_FIELDS being a list
Thanks Roman Alexander for the suggestion.
This commit is contained in:
parent
357d62d9f2
commit
69373f3420
1
AUTHORS
1
AUTHORS
|
@ -550,6 +550,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
Thomas Steinacher <http://www.eggdrop.ch/>
|
Thomas Steinacher <http://www.eggdrop.ch/>
|
||||||
Emil Stenström <em@kth.se>
|
Emil Stenström <em@kth.se>
|
||||||
Johan C. Stöver <johan@nilling.nl>
|
Johan C. Stöver <johan@nilling.nl>
|
||||||
|
Chris Streeter <chris@chrisstreeter.com>
|
||||||
Nowell Strite <http://nowell.strite.org/>
|
Nowell Strite <http://nowell.strite.org/>
|
||||||
Thomas Stromberg <tstromberg@google.com>
|
Thomas Stromberg <tstromberg@google.com>
|
||||||
Hannes Struß <x@hannesstruss.de>
|
Hannes Struß <x@hannesstruss.de>
|
||||||
|
|
|
@ -156,6 +156,18 @@ class CustomUserNonUniqueUsername(AbstractBaseUser):
|
||||||
app_label = 'auth'
|
app_label = 'auth'
|
||||||
|
|
||||||
|
|
||||||
|
class CustomUserNonListRequiredFields(AbstractBaseUser):
|
||||||
|
"A user with a non-list REQUIRED_FIELDS"
|
||||||
|
username = models.CharField(max_length=30, unique=True)
|
||||||
|
date_of_birth = models.DateField()
|
||||||
|
|
||||||
|
USERNAME_FIELD = 'username'
|
||||||
|
REQUIRED_FIELDS = 'date_of_birth'
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'auth'
|
||||||
|
|
||||||
|
|
||||||
class CustomUserBadRequiredFields(AbstractBaseUser):
|
class CustomUserBadRequiredFields(AbstractBaseUser):
|
||||||
"A user with a non-unique username"
|
"A user with a non-unique username"
|
||||||
username = models.CharField(max_length=30, unique=True)
|
username = models.CharField(max_length=30, unique=True)
|
||||||
|
|
|
@ -174,6 +174,13 @@ class CreatesuperuserManagementCommandTestCase(TestCase):
|
||||||
|
|
||||||
|
|
||||||
class CustomUserModelValidationTestCase(TestCase):
|
class CustomUserModelValidationTestCase(TestCase):
|
||||||
|
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonListRequiredFields')
|
||||||
|
def test_required_fields_is_list(self):
|
||||||
|
"REQUIRED_FIELDS should be a list."
|
||||||
|
new_io = StringIO()
|
||||||
|
get_validation_errors(new_io, get_app('auth'))
|
||||||
|
self.assertIn("The REQUIRED_FIELDS must be a list or tuple.", new_io.getvalue())
|
||||||
|
|
||||||
@override_settings(AUTH_USER_MODEL='auth.CustomUserBadRequiredFields')
|
@override_settings(AUTH_USER_MODEL='auth.CustomUserBadRequiredFields')
|
||||||
def test_username_not_in_required_fields(self):
|
def test_username_not_in_required_fields(self):
|
||||||
"USERNAME_FIELD should not appear in REQUIRED_FIELDS."
|
"USERNAME_FIELD should not appear in REQUIRED_FIELDS."
|
||||||
|
|
|
@ -51,6 +51,10 @@ def get_validation_errors(outfile, app=None):
|
||||||
|
|
||||||
# If this is the current User model, check known validation problems with User models
|
# If this is the current User model, check known validation problems with User models
|
||||||
if settings.AUTH_USER_MODEL == '%s.%s' % (opts.app_label, opts.object_name):
|
if settings.AUTH_USER_MODEL == '%s.%s' % (opts.app_label, opts.object_name):
|
||||||
|
# Check that REQUIRED_FIELDS is a list
|
||||||
|
if not isinstance(cls.REQUIRED_FIELDS, (list, tuple)):
|
||||||
|
e.add(opts, 'The REQUIRED_FIELDS must be a list or tuple.')
|
||||||
|
|
||||||
# Check that the USERNAME FIELD isn't included in REQUIRED_FIELDS.
|
# Check that the USERNAME FIELD isn't included in REQUIRED_FIELDS.
|
||||||
if cls.USERNAME_FIELD in cls.REQUIRED_FIELDS:
|
if cls.USERNAME_FIELD in cls.REQUIRED_FIELDS:
|
||||||
e.add(opts, 'The field named as the USERNAME_FIELD should not be included in REQUIRED_FIELDS on a swappable User model.')
|
e.add(opts, 'The field named as the USERNAME_FIELD should not be included in REQUIRED_FIELDS on a swappable User model.')
|
||||||
|
|
Loading…
Reference in New Issue