. Я создаю пользовательскую модель, используя AbstractBaseUser
и PermissionsMixin
, следуя этим двум учебникам (tutorial-1 и tutorial-2).Требуется создать пользовательский ящик для пользовательской модели в django.
Эта модель до сих пор:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField('email address', unique=True, db_index=True)
username = models.CharField('username', unique=True, db_index=True)
joined = models.DateField(auto_now_add=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
def __unicode__(self):
return self.email
Теперь то, что я запутался о том, что в tutorial-1, автор не сделал любой пользовательский менеджер для пользовательской модели пользователя. Вместо этого он использует формы для создания пользователя.
class RegistrationForm(forms.ModelForm):
email = forms.EmailField(label = 'Email')
password1 = forms.CharField(widget = forms.PasswordInput(), label = "Password")
password2 = forms.CharField(widget = forms.PasswordInput(), label = 'Retype password')
class Meta:
model = User
fields = ['email', 'username', 'password1', 'password2']
def clean(self):
"""
Verify that the values entered into the password fields match
"""
cleaned_data = super(RegistrationForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise ValidationError("Password don't match.")
return self.cleaned_data
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
Но в tutorial-2, ее автор сделал собственный менеджер для пользовательской модели пользователя.
class UserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
user = self.model(
email=self.normalize_email(email),
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, **kwargs):
user = self.model(
email=email,
is_staff=True,
is_superuser=True,
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
Реферирования Django Docs, есть пример пользовательской модели пользователя, и он использует собственный менеджер. Мой вопрос заключается в том, нормально ли делать какой-либо другой пользовательский менеджер, а если нет, то зачем создавать пользовательский менеджер?
Да, что я получил сейчас, спасибо. Но я все еще смущен, потому что в учебнике-1 он использует 'USERNAME_FIELD' в качестве электронного письма, но он не сделал другого настраиваемого менеджера, чтобы справиться с этим. Не могли бы вы помочь мне в этом. Спасибо. –
Если вы [посмотрите на этот комментарий] (http://blackglasses.me/2013/09/17/custom-django-user-model/#comment-1527045990) в первом учебнике, мне кажется, что это был ошибка, чтобы оставить менеджера. – Alasdair
Хорошо. Я думаю, что я следую сейчас. Большое вам спасибо за вашу помощь. –