В проекте Wagtail 1.8 я пытаюсь создать пользовательскую модель пользователя, в которой не используется имя пользователя, а только электронная почта.Я хочу иметь возможность определять дополнительные переменные, такие как is_training
, и отображать их в форме редактирования в административной области под admin/users/edit
.
Теперь у меня уже есть EmailUser (CustomUser), но я не могу добавить логическое значение или флажок на панель редактирования администратора.
class AbstractEmailUser(AbstractBaseUser, PermissionsMixin):
"""Abstract User with the same behaviour as Django's default User.
AbstractEmailUser does not have username field. Uses email as the
USERNAME_FIELD for authentication.
Inherits from both the AbstractBaseUser and PermissionMixin.
The following attributes are inherited from the superclasses:
* password
* last_login
* is_superuser
"""
email = models.EmailField(
verbose_name=_('email address'),
max_length=255,
unique=True,
db_index=True,
error_messages={
'unique': _("A user with that e-mail already exists."),
}
)
email_new = models.EmailField(
verbose_name=_('new email address'),
max_length=255,
unique=True,
error_messages={
'unique': _("A user with that e-mail already exists."),
},
null=True, blank=True
)
first_name = models.CharField(
max_length=150,
verbose_name=_('first name'),
blank=True,
)
last_name = models.CharField(
max_length=150,
verbose_name=_('last name'),
blank=True
)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
verbose_name=_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
is_training = models.BooleanField(
verbose_name=_('training'),
default=False,
help_text=_(
'Designates whether this user participates in training and therefore has special access to the'
'training site. '
),
)
date_joined = models.DateTimeField(
verbose_name=_('date joined'),
default=timezone.now
)
last_downloads_check = models.DateTimeField(
verbose_name=_('Last downloads check'),
help_text=_('The last time the user checked the latest downloads.'),
default=timezone.now
)
last_news_check = models.DateTimeField(
verbose_name=_('Last news check'),
help_text=_('The last time the user checked the latest news in the consultants only area.'),
default=timezone.now
)
objects = EmailUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
abstract = True
def get_full_name(self):
"""Return first_name plus last_name, with a space in between."""
return "{} {}".format(self.first_name, self.last_name).strip()
def get_short_name(self):
"""Returns the short name for the user."""
return self.first_name
def get_identifier(self):
if self.first_name and self.last_name:
return self.get_full_name()
else:
return self.email
def email_user(self, subject, message, from_email=None, **kwargs):
"""Send an email to this User."""
send_mail(subject, message, from_email, [self.email], **kwargs)
def __unicode__(self):
return 'email="{}" firstName="{}" lastName="{}" admin={}'.format(
self.email, self.first_name, self.last_name, self.is_staff, self.is_training
)
Как я понимаю, мне нужно написатьНовый ModelAdmin, потому что мой EmailUser не имеет имени пользователя:
from __future__ import unicode_literals
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from .models import EmailUser
class EmailUserAdmin(admin.ModelAdmin):
list_display = ('email', 'first_name', 'last_name', 'is_training')
list_filter = ('is_staff', 'is_superuser')
admin.site.register(User, EmailUserAdmin)
И при написании ModelAdmin я застреваю.Я не знаю, как подключиться к административным формам трясогузок и заставить их работать с моей моделью.
Любая помощь будет высоко оценена.