Django 发信号 post_save 更新
Django signals post_save update
更新学生入学记录(折扣类型)时,学生折扣(折扣类型)也会更新,但是如果我想使用学生折扣(折扣)更新学生入学记录(折扣类型)怎么办类型)
这是我的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)
学生入学记录(折扣类型)没有更新
您需要为创建或更新 studentDiscount
实例时编写信号处理程序。您需要与 studentDiscount.create
类似的方法,但它需要存在于 StudentsEnrollmentRecord
上并且发件人是 studentDiscount
.
更新学生入学记录(折扣类型)时,学生折扣(折扣类型)也会更新,但是如果我想使用学生折扣(折扣)更新学生入学记录(折扣类型)怎么办类型)
这是我的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)
学生入学记录(折扣类型)没有更新
您需要为创建或更新 studentDiscount
实例时编写信号处理程序。您需要与 studentDiscount.create
类似的方法,但它需要存在于 StudentsEnrollmentRecord
上并且发件人是 studentDiscount
.