Django Сохранение данных нескольких пользователей и двух таблиц
Я впервые задаю здесь вопрос, спасибо за приветствие. Я качок в программировании. Я работаю над проектом управления студентами на Django. Я хочу, чтобы мой проект имел несколько типов пользователей (администратор, студент, лекция). Но для меня важно, чтобы когда администратор создает нового студента/лекцию, он сохранял его одновременно в таблице User и в таблице student/lecture. Я использую пользовательскую модель пользователя. Пожалуйста, помогите мне, я пробовал, но я получаю ошибку значения, ошибку атрибута, ошибку отсутствующего значения... Я с нетерпением жду вашего ответа, спасибо.
Вот мой models.py
class Student(models.Model):
rn= models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, db_column="Roll_Number")
fn = models.TextField(db_column="First_Name")
ln = models.TextField(db_column="Last_Name")
sex = models.CharField(db_column="Sex",choices=sex_choice, default='Male', max_length=20)
sc = models.ForeignKey( School,related_name='departs',on_delete=models.CASCADE, db_column="Scholl_Institute")
dp = models.ForeignKey( Department,on_delete=models.CASCADE, db_column="Department")
year = models.ForeignKey( Year,on_delete=models.CASCADE,db_column="Year")
tel = models.TextField(db_column="Telephone")
em = models.EmailField(verbose_name="email", max_length=100, unique=True,db_column="Email")
def __str__(self):
return str(f"{self.ln} {self.fn}")
def clean_rn(self):
if self.instance:
return self.instance.rn
else:
return self.fields['rn']
def get_absolute_url(self):
return reverse('student:update', kwargs={'id': self.pk})
def save(self, *args, **kwargs):
try:
default_password = make_password(self.rn)
Student.objects.create()
name = f"{self.ln} {self.fn}"
User.objects.create_user(username=name, email=self.em, password=default_password)
User.is_student = True
User.type = "Student"
super(Student, self).save()
except IndexError:
print('IndexError')
except RecursionError:
print('RecursionError')
class Lecture(models.Model):
lid= models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True,db_column="Lecture_Id")
fn = models.TextField(db_column="First_Name")
ln = models.TextField(db_column="Last_Name")
sex = models.CharField(db_column="Sex",choices=sex_choice, default='Male', max_length=20)
type = models.CharField(db_column="Type",choices=type, default='Lecture', max_length=20)
tel = models.TextField(db_column="Telephone")
em = models.EmailField(verbose_name="email", max_length=100, unique=True,db_column="Email")
def __str__(self):
return str(f"{self.ln} {self.fn}")
def clean_lid(self):
if self.instance:
return self.instance.lid
else:
return self.fields['lid']
def save(self, *args, **kwargs):
try:
default_password = make_password(self.lid)
name = f"{self.ln} {self.fn}"
#Lecture.objects.create()
User.objects.create_user(email=self.em,username=name, password=default_password)
User.is_lecture =True
User.type = "Lecture"
super(Lecture, self).save()
except IndexError:
print('IndexError')
except RecursionError:
print('RecursionError')
Вот моя пользовательская модель пользователя
Вот ошибка, которую я получаю: Ошибка get