[4.0.x] Fixed #33178 -- Made createsuperuser validate required fields passed in options in interactive mode.
Backport of b1b26b37af
from main.
This commit is contained in:
parent
b55df4c74a
commit
048fbf9c89
|
@ -124,6 +124,8 @@ class Command(BaseCommand):
|
|||
for field_name in self.UserModel.REQUIRED_FIELDS:
|
||||
field = self.UserModel._meta.get_field(field_name)
|
||||
user_data[field_name] = options[field_name]
|
||||
if user_data[field_name] is not None:
|
||||
user_data[field_name] = field.clean(user_data[field_name], None)
|
||||
while user_data[field_name] is None:
|
||||
message = self._get_input_message(field)
|
||||
input_value = self.get_input_data(field, message)
|
||||
|
|
|
@ -531,6 +531,29 @@ class CreatesuperuserManagementCommandTestCase(TestCase):
|
|||
|
||||
test(self)
|
||||
|
||||
@override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK')
|
||||
def test_validate_fk_via_option_interactive(self):
|
||||
email = Email.objects.create(email='mymail@gmail.com')
|
||||
Group.objects.all().delete()
|
||||
nonexistent_group_id = 1
|
||||
msg = f'group instance with id {nonexistent_group_id} does not exist.'
|
||||
|
||||
@mock_inputs({
|
||||
'password': 'nopasswd',
|
||||
'Username (Email.id): ': email.pk,
|
||||
'Email (Email.email): ': email.email,
|
||||
})
|
||||
def test(self):
|
||||
with self.assertRaisesMessage(CommandError, msg):
|
||||
call_command(
|
||||
'createsuperuser',
|
||||
group=nonexistent_group_id,
|
||||
stdin=MockTTY(),
|
||||
verbosity=0,
|
||||
)
|
||||
|
||||
test(self)
|
||||
|
||||
@override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2m')
|
||||
def test_fields_with_m2m(self):
|
||||
new_io = StringIO()
|
||||
|
|
Loading…
Reference in New Issue