Save() запрещена для предотвращения потери данных из-за несохранения связанного объекта 'student'
Я воссоздаю проект Django. Я пытаюсь создать сигнал post_save, который будет создавать оценки студента, когда студент создан. Я получаю сообщение об ошибке: save() запрещено для предотвращения потери данных из-за несохраненного связанного объекта 'student'. Вот моя модель студента:
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
class_id=models.ForeignKey(Class, on_delete=models.CASCADE, null=True, blank=True, default=1)
col = models.CharField(max_length=50, null=True, blank=True, default=science_college)
name = models.CharField(max_length=100, null=True, blank=True)
sex= models.CharField(max_length=50, choices=SEX_TYPE, null=True, blank=True)
DOB=models.DateField(default="1998-01-01", null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
SID=models.CharField(('STUDENT_ID'), max_length=30, default=student_ids, unique=True, editable=False)
id = models.IntegerField(primary_key=True, editable=False)
def __str__(self):
return self.name
А вот код сигнала
def create_marks(sender, instance, created, **kwargs):
if created:
if hasattr(instance, 'name'):
ass_list = instance.class_id.assign_set.all()
for ass in ass_list:
try:
StudentCourse.objects.get(student=instance, course=ass.course)
except StudentCourse.DoesNotExist:
sc=StudentCourse(student=instance, course=ass.course)
sc.save()
sc.marks_set.create(name='CAT 1')
sc.marks_set.create(name='CAT 2')
sc.marks_set.create(name='CAT 3')
sc.marks_set.create(name='SEMESTER EXAM')
elif hasattr(instance, 'course'):
student_list = instance.class_id.student_set.all()
cr = instance.course
for s in student_list:
try:
StudentCourse.objects.get(student=s, course=cr)
except StudentCourse.DoesNotExist:
sc = StudentCourse(student=s, course=cr)
sc.save()
sc.marks_set.create(name='CAT 1')
sc.marks_set.create(name='CAT 2')
sc.marks_set.create(name='CAT 3')
sc.marks_set.create('SEMESTER EXAM')
post_save.connect(create_marks, sender=Student)