Вы можете использовать что-то вроде:
class Person(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
# more common fields
class Student(Person):
specific_field_to_student = models.CharField(max_length=255)
# more fields
class Teacher(Person):
specific_field_to_teacher = models.CharField(max_length=255)
# more fields
В базе данных вы будете иметь 3 таблицы (yourapp_person
, yourapp_student
и yourapp_teacher
). Теперь, если type_field
значение student, вы будете использовать модель Student
, чтобы создать пользователя, если это учитель, вы будете использовать модель Teacher
.
Примечание: Вам может понадобиться сделать Person
модель выше подкласс встроенного User
модели.
Edit:
я редактировал модель выше, чтобы принять во внимание требования в комментариях ниже.
Теперь, чтобы получить пользователя по идентификатору, вы можете использовать следующий код на ваш взгляд:
user = Person.objects.get(id=id) # id is the view param
if hasattr(user, 'student'):
print("Student")
else: # hasattr(user, 'teacher')
print("Teacher")
Вы имеете в виду, что вы используете 'type_field' для разграничения между объектами ученика и учителя? (с параметром 'type_field', переданным вашей формой в'/users') – ettanany
При первом создании пользователя мы просим их выбрать там тип и заполнить основные элементы, такие как имя и адрес электронной почты, которые будут вписываться в модель пользователя Django. Но вся операция после этого должна захватить правый профиль пользователя USER, чтобы попросить их заполнить необычные поля. – user3411864
. Пожалуйста, взгляните на приведенный ниже ответ и сообщите мне, подходит ли оно вам. – ettanany