안녕 장고에 대한 내 사용자 정의 사용자에게 드문 문제점이 있습니다. 이것은 내 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')
모두 정확합니까?
관리자 패널을 사용하여 새 사용자를 만들면이 메시지가 표시됩니다.
오류가있는 것을 볼 수 있지만 오류가 어디에 있는지를 나타내는 필드는 선택하지 않습니다. 약간의 조사 나 관리자 패널 클래스를 변경하고 나는 (나의 정의 사용자 클래스에 존재하는 않는 필드) 필드 이름
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로 사용하는지 모르겠습니다. 사용자 정의 양식에서이 필드는 나타나지 않으며 문제없이 사용자를 만들 수 있습니다. 하지만 Panel admin에서는 어떤 사용자도 만들 수 없습니다.
내 문제를 해결할 수 있기를 기대합니다.