﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
26745	Add the ability to customize user creation in the createsuperuser command	Lyra2108	nobody	"We want to perform actions after the creation of the superuser. But we do not want to rewrite the createsuper command entirely.

This should be done in a transaction, because if the post actions fail the user shall not be created.
Additionally it might be useful to also have a pre create action which can modify the user data passed to the ``create_superuser()`` method on the user manager and add non required parameters to the user data before the creation of the super user.

We thought about something along these lines:

{{{#!diff
--- ./django/contrib/auth/management/commands/createsuperuser.py        2016-06-11 01:02:02.307032020 +0200
+++ /home/markus/.venvs/inyoka/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py   2016-06-11 00:58:07.887693597 +0200
@@ -10,7 +10,7 @@
 from django.contrib.auth.management import get_default_username
 from django.core import exceptions
 from django.core.management.base import BaseCommand, CommandError
-from django.db import DEFAULT_DB_ALIAS
+from django.db import DEFAULT_DB_ALIAS, transaction
 from django.utils.encoding import force_str
 from django.utils.six.moves import input
 from django.utils.text import capfirst
@@ -146,10 +146,19 @@
         if username:
             user_data[self.UserModel.USERNAME_FIELD] = username
             user_data['password'] = password
-            self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
+            with transaction.atomic():
+                user_data = self.pre_create(user_data)
+                user = self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
+                self.post_create(user)
             if options['verbosity'] >= 1:
                 self.stdout.write(""Superuser created successfully."")
 
+    def pre_create(self, user_data):
+        return user_data
+
+    def post_create(self, user):
+        pass
+
     def get_input_data(self, field, message, default=None):
         """"""
         Override this method if you want to customize data inputs or
}}}
Diff is against v1.8.13 but this shouldn't make a difference."	New feature	closed	contrib.auth	dev	Normal	wontfix		markush	Unreviewed	0	0	0	0	1	0
