diff -r 129d45eec68c -r b6e0b1811723 src/ldt/ldt/user/models.py --- a/src/ldt/ldt/user/models.py Wed May 15 10:05:17 2013 +0200 +++ b/src/ldt/ldt/user/models.py Mon May 20 18:02:37 2013 +0200 @@ -1,48 +1,39 @@ from django.conf import settings -from django.contrib import admin -from django.contrib.auth.models import User, UserManager, Group +from django.contrib.auth.models import (AbstractUser, User, UserManager, Group, + BaseUserManager) from django.db import models from django.db.models.signals import post_save +from django.utils import timezone from sorl.thumbnail import ImageField -import datetime - -class Ldt(User): -# irigroups = models.ManyToManyField(IriGroup, blank=True) - - class Meta: - verbose_name = 'iri user' - verbose_name_plural = 'iri users' - - def __unicode__(self): - return self.username - + +class LdtUserManager(BaseUserManager): -class LdtManager(UserManager): - def create_user(self, username, email, password=None): - "Creates and saves a User with the given username, e-mail and password." - now = datetime.datetime.utcnow() - new_user = Ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now) - if password: - new_user.set_password(password) - else: - new_user.set_unusable_password() - new_user.save() - new_user.groups.add(Group.objects.get(name=settings.PUBLIC_GROUP_NAME)) - return new_user - - -class UserProfile (models.Model): - user = models.OneToOneField(User) - language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) - image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200) + def create_user(self, username, email=None, password=None, **extra_fields): + """ + Creates and saves a User with the given username, email and password. + """ + now = timezone.now() + if not username: + raise ValueError('The given username must be set') + email = UserManager.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) - @staticmethod - def create_user_profile(sender, instance, created, **kwargs): - if created: - UserProfile.objects.get_or_create(user=instance) - everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME) - instance.groups.add(everyone) + user.set_password(password) + user.save(using=self._db) + everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME) + user.groups.add(everyone) + return user + + 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 class GroupProfile(models.Model): group = models.OneToOneField(Group, primary_key=False, related_name='profile') @@ -58,17 +49,18 @@ admins = User.objects.filter(is_superuser=True) if admins: instance.user_set.add(admins[0]) + +class LdtUser(AbstractUser): + language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) + image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200) + + objects = LdtUserManager() + # To keep consistency with User.get_profile() method def get_profile(self): return self.profile -Group.add_to_class("get_profile", get_profile) - +Group.add_to_class("get_profile", get_profile) # @UndefinedVariable post_save.connect(GroupProfile.create_group_profile, sender=Group) -post_save.connect(UserProfile.create_user_profile, sender=User) - -User.objects = LdtManager() -User.objects.contribute_to_class(User, "objects") -admin.site.register(Ldt)