【问题标题】:Django signals post_save updateDjango 发出 post_save 更新信号
【发布时间】:2020-01-24 15:34:31
【问题描述】:

当学生入学记录(折扣类型)更新时,学生折扣(折扣类型)也会更新,但是如果我想使用学生折扣(折扣类型)来更新学生入学记录(折扣类型)怎么办

这是我的models.py

class studentDiscount(models.Model):
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrollmentRecord, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Discount_Type = models.ForeignKey(Discount, related_name='+', on_delete=models.CASCADE, 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.Discount_Type != instance.Discount_Type:

                studentDiscount.objects.filter(
                    Students_Enrollment_Records=instance
                ).delete()
            else:
                return None

        discount = studentDiscount.objects.filter(Discount_Type=instance.Discount_Type)
        if created:
            print("nagsulod")
            studentDiscount.objects.create(
                Students_Enrollment_Records=instance,
                Discount_Type=instance.Discount_Type)
        else:
            studentDiscount.objects.create(
                Students_Enrollment_Records=instance,
                Discount_Type=instance.Discount_Type)

    def __str__(self):
        suser = '{0.Students_Enrollment_Records}'
        return suser.format(self)

class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, 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)
    strands = models.ForeignKey(strand, 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)
    Discount_Type = models.ForeignKey(Discount, related_name='+', on_delete=models.CASCADE, null=True,blank=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,blank=True,null=True)
    ESC = models.ForeignKey(esc, on_delete=models.CASCADE,null=True,blank=True)
    Remarks = models.TextField(max_length=500,null=True,blank=True)

class Discount(models.Model):
    Code=models.CharField(max_length=500,blank=True)
    Discount_Type=models.CharField(max_length=500,blank=True)
    Remarks=models.TextField(max_length=500,blank=True)
    TuitionFee_Discount_Amount=models.FloatField(null=True,blank=True)
    TuitionFee_Discount_Rate = models.FloatField(null=True,blank=True)
    Miscellaneous_Discount_Amount=models.FloatField(null=True,blank=True)
    Miscellaneous_Discount_Rate = models.FloatField(null=True,blank=True)

如果我更新学生注册记录 (Discount_Type)

学生折扣(折扣类型)也更新

但是当我更新学生折扣时(discount_type)

学生注册记录(折扣类型)不更新

【问题讨论】:

    标签: django django-models django-signals


    【解决方案1】:

    您需要为studentDiscount 实例的创建或更新时间编写一个信号处理程序。您需要与studentDiscount.create 类似的方法,但它需要存在于StudentsEnrollmentRecord 并且发件人是studentDiscount

    【讨论】:

    • 那我该怎么办@schillingt 先生?您可以使用我的代码提供示例吗?
    • 不,我认为这对你来说是一个很好的学习机会。您的代码处理一个方向,现在您需要为另一个方向反转它。我已经提供了方向,实现就交给你了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2014-12-18
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多