Как сохранить все связанные данные, используя сигналы django post_save - PullRequest
0 голосов
/ 31 октября 2019

Я просто хочу, чтобы, если администратор вставил Курс (ABM) и Уровень образования (11 класс) и Раздел (Хроники), он получит все связанные данные в предметном разделе учителя (вторая картинка) и автоматически сохранит записанный студентом предмет (третье изображение) моя проблема только в сохранении данных.

enter image description here

subjectsectionteacher enter image description here

это мой код в 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())

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

ОБНОВЛЕНИЕ это то, что я хочу

enter image description here

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

попробуйте

for each in teachers:
            if created and teachers.exists():
                StudentsEnrolledSubject.objects.create(
                        pk=each.id,
                        Students_Enrollment_Records=instance,
                        Subject_Section_Teacher=each

                    )
1 голос
/ 31 октября 2019

Вы можете использовать метод 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...