Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/11/2013, 06:21
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Modelo usuario personalizado y migraciones

Hola, haciendo pruebas durante el fin de semana resulta que hacer una migracion antes del syncdb es imposible pero el syncdb no intento crear un superusuario, me dio tiempo de hacer la migracion seguidamente y el problema viene al intentar crear el superusuario con el comando django createsuperuser que da este error:

NameError: global name 'username' is not defined

He mirado en github el codigo de createsuperuser para ver si veo que ha podido pasar, he revisado mi modelo, pero al menos de momento no se me ocurre nada, en el modelo no uso username pero indico que el campo de nombre de usuario es el campo email, y username en createsuperuser es una variable que por lo que creo entnedi recoge el campo que se indica como nombre de usuario.

Creo que la parte del createsuperuser donde se para es en:
user_data[self.UserModel.USERNAME_FIELD] = username

Pues todo lo anterior si lo hace de pedirme el email, la clave, etc.

El codigo del modelo:
Código:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from django.core.mail import send_mail
from django.contrib.auth.signals import user_logged_in


def update_last_login(sender, user, **kwargs):
    """
    A signal receiver which updates the last_login date for
    the user logging in.
    """
    user.last_login = timezone.now()
    user.save(update_fields=['last_login'])
user_logged_in.connect(update_last_login)

class UserManager(BaseUserManager):

    def _create_user(self, email, password,
                     is_staff, is_superuser, **extra_fields):
        """
        Creates and saves a User with the given email and password.
        """
        now = timezone.now()
        if not email:
            raise ValueError('The given email must be set')
        email = self.normalize_email(email)
        user = self.model(email=email,
                          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, email, password=None, **extra_fields):
        return self._create_user(email, password, False, False,
                                 **extra_fields)

    def create_superuser(self, email, password, **extra_fields):
        return self._create_user(username, email, password, True, True,
                                 **extra_fields)

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), max_length=254,
                              unique=True, db_index=True, blank=True)
    is_staff = models.BooleanField(_('staff status'), default=False,
        help_text=_('Designates whether the user can log into this admin '
                    'site.'))
    is_active = models.BooleanField(_('active'), default=True,
        help_text=_('Designates whether this user should be treated as '
                    'active. Unselect this instead of deleting accounts.'))
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def get_full_name(self):
        return getattr(self, self.USERNAME_FIELD)

    def get_short_name(self):
        return getattr(self, self.USERNAME_FIELD)

    def email_user(self, subject, message, from_email=None, **kwargs):
        """
        Sends an email to this User.
        """
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def __str__(self):
        return self.email

    def __unicode__(self):
        return self.email
__________________
JHG

Última edición por jhg; 11/11/2013 a las 06:23 Razón: Con la tonteria del captcha luego no salia la web tuve que dar atras y desaparecio el codigo final