Здравейте, имам рядък проблем с моя персонализиран потребител за 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. В персонализирани формуляри това поле не се появява и мога да създавам потребители без проблеми. Но в администраторския панел не мога да създам потребител.
Очаквам, че можете да разрешите проблема ми.