django post_save: как вставить и обновить все связанные записи из другой таблицы - PullRequest
2 голосов
/ 07 ноября 2019
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, *args, **kwargs):
        teachers = SubjectSectionTeacher.objects.filter(Sections=instance.Section,
                                                        Education_Levels=instance.Education_Levels,
                                                        Courses=instance.Courses)
        for each in teachers:
            if  created or teachers.exists():
                StudentsEnrolledSubject.objects.update_or_create(
                    Students_Enrollment_Records= instance,
                    defaults={'Subject_Section_Teacher':each}
                )
class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, related_name='students', on_delete=models.CASCADE, null=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)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True,


class SubjectSectionTeacher(models.Model):
    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)

почти неделю я пытался решить эту проблему, но до сих пор я не решил ее, моя проблема в том, что, когда я вставляю данные (рисунок 1), он получит соответствующую запись из рисунка 2, но в моем случае только 1сохранить связанную запись в изображении 3,

изображение 1 picture 1

изображение 2 picture 2

изображение 3 enter image description here

ОБНОВЛЕНИЕ

    for each in teachers:
        if created or teachers.exists():
            StudentsEnrolledSubject.objects.update_or_create(
                pk=each.id,
                Students_Enrollment_Records= instance,
                defaults={'Subject_Section_Teacher':each}
            )

при попытке сохранить все связанные записи, но при попытке обновления создать другую записьот зачисленных студентов, похоже, update_or_create не работает,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...