Проблеми в персонализирания потребител на django

Здравейте, имам рядък проблем с моя персонализиран потребител за Django. Това е моят CustomUser код.

class CustomUser(AbstractBaseUser, PermissionsMixin):
    """ Custom User model. This class replace the default django user.
    """
    nick_validator =  [
        validators.RegexValidator(re.compile('^[\w.@+\- ]+$'), 
                                  'Introduce un nombre de usuario válido', 
                                  'invalid')
    ]

    help_texts = {
        'nick': '30 caracteres o menos. Caracteres válidos: letas, números'
                    ' y los caracteres @/./ /-/+/_',
        'avatar':(
            'Selecciona una imágen mayor que %(m)dx%(m)d y menor que '
            '%(M)dx%(M)d' % {'m': AVATAR_SIZE_MIN, 'M': AVATAR_SIZE_MAX}
        )
    }

    #Fields
    nick = models.CharField(max_length=30, unique=True,
                                validators=nick_validator,
                                help_text=help_texts['nick'])
    email = models.EmailField('Dirección e-mail', max_length=254, unique=True)
    is_active = models.BooleanField('Activo', default=True)
    is_staff = models.BooleanField('Está staff', default=False)
    date_joined = models.DateTimeField('Fecha de registro', auto_now_add=True)
    avatar = models.ImageField(upload_to=getAvatarPath, 
                               help_text=help_texts['avatar'],
                               default=settings.DEFAULT_AVATAR)

    objects = CustomUserManager()   #Object which make the users in shell.
    USERNAME_FIELD = 'nick'         #Field used as nick.
    REQUIRED_FIELDS = ['email']     #Required fields for the custom user.

    class Meta:
        verbose_name = 'Usuario'
        verbose_name_plural = 'Usuarios'


    def emailUser(self, subject, message, from_email=None):
        """ Send an email to the user.
            :param subject: Email subject
            :param message: Email message
            :param from_email: sender email
        """ 
        send_mail(subject, message, from_email, [self.email])

    def get_full_name(self):
        return '%s %s' % self.nick, self.email

    def get_short_name(self):
        return self.email

    def getUserUrl(self, action=None):
        #from django.utils.http import urlquote
        kwargs = {'nick': self.nick}
        if action!=None:
            kwargs['action'] = action

        return reverse('users:show_user', kwargs=kwargs)

    def getUserUrlComments(self):
        return self.getUserUrl('comentarios')

    def getUserUrlPosters(self):
        return self.getUserUrl('posters')

Всичко е правилно, нали?

Когато направя нов потребител с помощта на административния панел, показвам това съобщение. въведете описание на изображението тук

Можете да видите кое се появява като грешка, но не избира поле, което да показва къде е грешката. Проучвайки малко, промених класа на административния панел и добавих потребителското име на полето (поле, което не съществува в моя персонализиран потребителски клас)

class CustomUserAdmin(UserAdmin):
    list_display = ('nick', 'email', 'is_superuser')
    readonly_fields = ('date_joined',)
    fieldsets = (
        ('Información general', {'fields': ('username', 'nick', 'email', 'password',
                                 'date_joined', 'groups')}),
        ('Permisos', {'fields': ('is_active', 'is_staff', 'is_superuser', 
                                 'user_permissions')}),
        ('Información personal', {'fields': ('avatar', 'deleteAvatar')})
    )
    search_fields = ('nick', 'email')
    ordering = ('nick',)

    add_fieldsets = (
        ('Información general', {'fields': ('username', 'nick', 
                                            'email', 'password1',
                                            'password2')}),
        ('Permisos', {'fields': ('is_active', 'is_staff', 'is_superuser')}),
        ('Información personal', {'fields': ('avatar',)})
    )

    add_form = CustomUserCreationForm
    form = CustomUserChangeForm

Проверявам пак и това е резултата. въведете описание на изображението тук

Има скрито поле (потребителско име) в моя CustomUser. Не съм направил това поле в моя customUser, нито се появява в таблицата на базата данни. Django добавя автоматично това поле. И не знам как да изтрия това поле и да използвам полето "nick" като USERNAME_FIELD. В персонализирани формуляри това поле не се появява и мога да създавам потребители без проблеми. Но в администраторския панел не мога да създам потребител.

Очаквам, че можете да разрешите проблема ми.


person davidnotplay    schedule 24.10.2014    source източник


Отговори (1)


Потребителското име се изисква по подразбиране в потребителите на django, които разширявате. Можете да проверите наследяването на Python.

По принцип имате полета за потребителско име, имейл и парола по подразбиране плюс полетата, които добавяте. Вашето поле Nick не е необходимо...това вече се прави от потребителското име.

person cdvv7788    schedule 25.10.2014