mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[4.0.x] Refs #21755 -- Fixed createsuperuser crash for required foreign keys passed in options in interactive mode.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Backport of 4ff500f294 from main
			
			
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							224fa0bc7d
						
					
				
				
					commit
					b55df4c74a
				
			| @@ -134,12 +134,12 @@ class Command(BaseCommand): | ||||
|                                 self.stderr.write('Error: This field cannot be blank.') | ||||
|                                 continue | ||||
|                             user_data[field_name] = [pk.strip() for pk in input_value.split(',')] | ||||
|                         # Wrap any foreign keys in fake model instances | ||||
|                         if field.many_to_one: | ||||
|                             fake_user_data[field_name] = field.remote_field.model(input_value) | ||||
|  | ||||
|                     if not field.many_to_many and field_name not in fake_user_data: | ||||
|                     if not field.many_to_many: | ||||
|                         fake_user_data[field_name] = user_data[field_name] | ||||
|                     # Wrap any foreign keys in fake model instances. | ||||
|                     if field.many_to_one: | ||||
|                         fake_user_data[field_name] = field.remote_field.model(user_data[field_name]) | ||||
|  | ||||
|                 # Prompt for a password if the model has one. | ||||
|                 while PASSWORD_FIELD in user_data and user_data[PASSWORD_FIELD] is None: | ||||
|   | ||||
| @@ -505,6 +505,32 @@ class CreatesuperuserManagementCommandTestCase(TestCase): | ||||
|  | ||||
|         test(self) | ||||
|  | ||||
|     @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') | ||||
|     def test_fields_with_fk_via_option_interactive(self): | ||||
|         new_io = StringIO() | ||||
|         group = Group.objects.create(name='mygroup') | ||||
|         email = Email.objects.create(email='mymail@gmail.com') | ||||
|  | ||||
|         @mock_inputs({'password': 'nopasswd'}) | ||||
|         def test(self): | ||||
|             call_command( | ||||
|                 'createsuperuser', | ||||
|                 interactive=True, | ||||
|                 username=email.pk, | ||||
|                 email=email.email, | ||||
|                 group=group.pk, | ||||
|                 stdout=new_io, | ||||
|                 stdin=MockTTY(), | ||||
|             ) | ||||
|  | ||||
|             command_output = new_io.getvalue().strip() | ||||
|             self.assertEqual(command_output, 'Superuser created successfully.') | ||||
|             u = CustomUserWithFK._default_manager.get(email=email) | ||||
|             self.assertEqual(u.username, email) | ||||
|             self.assertEqual(u.group, group) | ||||
|  | ||||
|         test(self) | ||||
|  | ||||
|     @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2m') | ||||
|     def test_fields_with_m2m(self): | ||||
|         new_io = StringIO() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user