Насколько я знаю, у вас не может иметь несколько моделей пользователей с разными свойствами. Django может иметь только одну модель пользователя. Если единственное изменение, которое вам нужно, это то, что одно из полей должно быть пропущено, лучше всего было бы просто игнорировать поле, когда это необходимо. Например, когда студент хочет зарегистрироваться, он щелкает ссылку «Зарегистрироваться как студент», где вы просто пропускаете поле is_teacher
в форме и наоборот, если это учитель.
Примером этого может быть:
Модель пользователя :
class User(AbstractUser):
"""User model."""
username = models.CharField(max_length=75, unique=True)
email = models.EmailField(_('email address'), unique=True)
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = UserManager()
def __str__(self):
"""Return a string representation of the user."""
string_repr = str(self.username) + ' (' + str(self.email) + ')'
return string_repr
Модель UserCreationForm (для ученика и учителя):
class CreateUserStudentForm(UserCreationForm):
# Require the email field.
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("email", "username", "is_student", "password1", "password2")
def clean_email(self):
data = self.cleaned_data['email']
return data.lower()
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
# Get all the relevant data, and save it.
user.email = self.clean_email()
user.username = self.cleaned_data["username"]
user.is_student = self.cleaned_data["is_student"]
user.set_password(self.cleaned_data['password1'])
# Save the newly created user.
if commit:
user.save()
return user
class CreateUserTeacherForm(UserCreationForm):
# Require the email field.
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("email", "username", "is_teacher", "password1", "password2")
def clean_email(self):
data = self.cleaned_data['email']
return data.lower()
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
# Get all the relevant data, and save it.
user.email = self.clean_email()
user.username = self.cleaned_data["username"]
user.is_teacher = self.cleaned_data["is_teacher"]
user.set_password(self.cleaned_data['password1'])
# Save the newly created user.
if commit:
user.save()
return user