Django получить все связанные записи, используя post_save / pre_save - PullRequest
2 голосов
/ 08 ноября 2019

Я просто хочу, чтобы, когда администратор обновил запись о зачислении студента (рисунок 1) и получил все связанные записи в ScheduleOfPayment (рисунок 2), он должен быть автоматически добавлен в StudentsPaymentSchedule (рисунок 3) (примечания, дата, сумма График платежей из ScheduleOfPayment)

class StudentsPaymentSchedule(models.Model):
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrollmentRecord, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Payment_Schedule = models.DateField(null=True, blank=True)
    Amount = models.FloatField(null=True, blank=True)
    Remarks = models.TextField(max_length=500, null=True, blank=True)


@receiver(pre_save, sender=StudentsEnrollmentRecord)
def get_older_instance(sender, instance, *args, **kwargs):
    try:
        instance._old_instance = StudentsEnrollmentRecord.objects.get(pk=instance.pk)
    except StudentsEnrollmentRecord.DoesNotExist:
        instance._old_instance = None    
    @receiver(post_save, sender=StudentsEnrollmentRecord)
    def create(sender, instance, created, *args, **kwargs):
        if not created:
            older_instance = instance._old_instance
            if older_instance.Payment_Type != instance.Payment_Type or \
                    older_instance.Education_Levels != instance.Education_Levels:

                StudentsEnrolledSubject.objects.filter(
                    Students_Enrollment_Records=instance
                ).delete()
            else:
                return None
        studentspayment = ScheduleOfPayment.objects.filter(Education_Levels=instance.Education_Levels, Payment_Type=instance.Payment_Type)
        for each in studentspayment:
                StudentsEnrolledSubject.objects.create(
                    Students_Enrollment_Records=instance,
                    Payment_Schedule=each)

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 ScheduleOfPayment(models.Model):
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True, null=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE,blank=True, null=True)
    Payment_Type = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE, blank=True, null=True)
    Display_Sequence = models.IntegerField(blank=True, null=True)
    Date = models.DateField(null=True,blank=True)
    Amount = models.FloatField(null=True, blank=True)

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

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

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

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