summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/auth/models.py21
-rw-r--r--django/contrib/auth/tests/test_models.py25
2 files changed, 36 insertions, 10 deletions
diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py
index f6380b9f24..c9c202355d 100644
--- a/django/contrib/auth/models.py
+++ b/django/contrib/auth/models.py
@@ -170,7 +170,8 @@ class BaseUserManager(models.Manager):
class UserManager(BaseUserManager):
- def create_user(self, username, email=None, password=None, **extra_fields):
+ def _create_user(self, username, email, password,
+ is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given username, email and password.
"""
@@ -179,20 +180,20 @@ class UserManager(BaseUserManager):
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email,
- is_staff=False, is_active=True, is_superuser=False,
- last_login=now, date_joined=now, **extra_fields)
-
+ is_staff=is_staff, is_active=True,
+ is_superuser=is_superuser, last_login=now,
+ date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
+ def create_user(self, username, email=None, password=None, **extra_fields):
+ return self._create_user(username, email, password, False, False,
+ **extra_fields)
+
def create_superuser(self, username, email, password, **extra_fields):
- u = self.create_user(username, email, password, **extra_fields)
- u.is_staff = True
- u.is_active = True
- u.is_superuser = True
- u.save(using=self._db)
- return u
+ return self._create_user(username, email, password, True, True,
+ **extra_fields)
@python_2_unicode_compatible
diff --git a/django/contrib/auth/tests/test_models.py b/django/contrib/auth/tests/test_models.py
index cf412c96e6..b0a4559b42 100644
--- a/django/contrib/auth/tests/test_models.py
+++ b/django/contrib/auth/tests/test_models.py
@@ -5,6 +5,7 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.models import (Group, User, SiteProfileNotAvailable,
UserManager)
from django.contrib.auth.tests.utils import skipIfCustomUser
+from django.db.models.signals import post_save
from django.test import TestCase
from django.test.utils import override_settings
from django.utils import six
@@ -140,3 +141,27 @@ class IsActiveTestCase(TestCase):
user_fetched = UserModel._default_manager.get(pk=user.pk)
# the attribute is always true for newly retrieved instance
self.assertEqual(user_fetched.is_active, True)
+
+
+@skipIfCustomUser
+class TestCreateSuperUserSignals(TestCase):
+ """
+ Simple test case for ticket #20541
+ """
+ def post_save_listener(self, *args, **kwargs):
+ self.signals_count += 1
+
+ def setUp(self):
+ self.signals_count = 0
+ post_save.connect(self.post_save_listener, sender=User)
+
+ def tearDown(self):
+ post_save.disconnect(self.post_save_listener, sender=User)
+
+ def test_create_user(self):
+ User.objects.create_user("JohnDoe")
+ self.assertEqual(self.signals_count, 1)
+
+ def test_create_superuser(self):
+ User.objects.create_superuser("JohnDoe", "mail@example.com", "1")
+ self.assertEqual(self.signals_count, 1)