首页 > 解决方案 > 如何使用 django 信号 post_save 保存所有相关数据

问题描述

我只想如果管理员插入课程(ABM)和教育水平(11年级)和部分(编年史),它将在subjectsectionteacher中获取所有相关数据(第二张图片),它会自动保存到学生注册的科目(第三张图片)我的问题是只有一个数据保存。

在此处输入图像描述

学科教师 在此处输入图像描述

这是我在 models.py 中的代码

class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, related_name='students', on_delete=models.CASCADE, null=True)
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Section = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Payment_Type = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE, null=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True,null=True)

class SubjectSectionTeacher(models.Model):
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE, null=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Sections = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True)
    Subjects = models.ForeignKey(Subject, related_name='+', on_delete=models.CASCADE, null=True)
    Employee_Users = models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE, null=True)

class StudentsEnrolledSubject(models.Model):
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrollmentRecord, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Subject_Section_Teacher = models.ForeignKey(SubjectSectionTeacher, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)

@receiver(post_save, sender=StudentsEnrollmentRecord)
    def create(sender, instance, created, **kwargs):
        teachers = SubjectSectionTeacher.objects.all().filter(Sections=instance.Section,Education_Levels=instance.Education_Levels)
        if created and teachers.exists():
            StudentsEnrolledSubject.objects.update_or_create(
                # This should be the instance not instance.Student_Users
                Students_Enrollment_Records=instance,
                # The below is also not an instance of SubjectSectionTeacher
                Subject_Section_Teacher=teachers.first())

我希望标题和图片足以理解我想说的话,我很抱歉!

更新 我想要的

在此处输入图像描述

标签: django

解决方案


您可以使用save()模型上的方法来更新相关数据。

在模型类中,您应该将方法定义为

def save(self, *args, **kwargs):
    #Code here
    if self.courses = "ABM":
        self.x = Model2.objects.get(id=x) #Whatever code you want
    super(model_name, self).save(*args, **kwargs)

推荐阅读