2014-10-24 4 views
0

안녕 장고에 대한 내 사용자 정의 사용자에게 드문 문제점이 있습니다. 이것은 내 CustomUser 코드입니다.django 사용자 정의 사용자의 문제점

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    """ Custom User model. This class replace the default django user. 
    """ 
    nick_validator = [ 
     validators.RegexValidator(re.compile('^[\[email protected]+\- ]+$'), 
            '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') 

모두 정확합니까?

관리자 패널을 사용하여 새 사용자를 만들면이 메시지가 표시됩니다. enter image description here

오류가있는 것을 볼 수 있지만 오류가 어디에 있는지를 나타내는 필드는 선택하지 않습니다. 약간의 조사 나 관리자 패널 클래스를 변경하고 나는 (나의 정의 사용자 클래스에 존재하는 않는 필드) 필드 이름

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 

나는 다시 확인하고이 결과를 추가했다. enter image description here

내 CustomUser에 숨겨진 필드 (사용자 이름)가 있습니다. 내 customUser에서이 필드를 만들지 않았고 데이터베이스 테이블에도 나타나지 않았습니다. Django는이 필드를 자동으로 추가합니다. 그리고이 필드를 어떻게 삭제하고 "nick"필드를 USERNAME_FIELD로 사용하는지 모르겠습니다. 사용자 정의 양식에서이 필드는 나타나지 않으며 문제없이 사용자를 만들 수 있습니다. 하지만 Panel admin에서는 어떤 사용자도 만들 수 없습니다.

내 문제를 해결할 수 있기를 기대합니다.

답변

0

사용자 이름은 확장하려는 django 사용자에게 기본적으로 필요합니다. python inheritance을 확인할 수 있습니다.

기본적으로 사용자 이름, 전자 메일 및 암호 필드와 추가 한 필드가 기본적으로 있습니다. 귀하의 닉 필드는 필요하지 않습니다 ... 그 이미 사용자 이름에 의해 이루어집니다.