Проблемы в пользовательском пользователе 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 автоматически добавляет это поле. И я не знаю, как удалить это поле и использовать поле «ник» как USERNAME_FIELD. В пользовательских формах это поле не появляется, и я могу без проблем создавать пользователей. Но в панели администратора я не могу создать пользователя.

Я ожидаю, что вы сможете решить мою проблему.


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


Ответы (1)


Имя пользователя требуется по умолчанию для пользователей django, которых вы расширяете. Вы можете проверить наследование Python.

В основном у вас есть поля имени пользователя, электронной почты и пароля по умолчанию, а также поля, которые вы добавляете. Поле «Ваш ник» не обязательно... это уже делается с помощью имени пользователя.

person cdvv7788    schedule 25.10.2014