如何按顺序触发 Django 信号
How to trigger Django Signals in sequence
我发射的信号有 3 个不同的接收器。我想做的是使用信号 update_student
更新 table Student
,稍后我想更新他在 update_student_enrollment
.
中的注册
我想在 Student 更新后更新 Enrollment。但是我的更新注册接收器在学生更新之前触发。
正在发送信号。
Signal.send("student_updated", student_id=1, active=active)
接收者 1
@receiver(student_updated)
def update_student(sender, **kwargs):
Student.objects.update(active=0) # I am setting the student activation to false. For simplicity I am not mentioning the logic which is setting the student to inactive.
print("Student Updated!")
接收者 2
@receiver(student_updated)
def update_student_enrollment(sender, **kwargs):
student=Student.objects.filter(student_id=1)
if student.active=0:
StudentEnrollment.objects.filter(student_id=1).update(active=0)
不知何故,我的 Receiver 2
在 Receiver 1
之前发射。
无法在 Django 中明确指定信号的顺序。
处理此问题的最佳方法是让接收器 1 信号本身发送一个信号,您可以让接收器 2 监听该信号。
我发射的信号有 3 个不同的接收器。我想做的是使用信号 update_student
更新 table Student
,稍后我想更新他在 update_student_enrollment
.
我想在 Student 更新后更新 Enrollment。但是我的更新注册接收器在学生更新之前触发。
正在发送信号。
Signal.send("student_updated", student_id=1, active=active)
接收者 1
@receiver(student_updated)
def update_student(sender, **kwargs):
Student.objects.update(active=0) # I am setting the student activation to false. For simplicity I am not mentioning the logic which is setting the student to inactive.
print("Student Updated!")
接收者 2
@receiver(student_updated)
def update_student_enrollment(sender, **kwargs):
student=Student.objects.filter(student_id=1)
if student.active=0:
StudentEnrollment.objects.filter(student_id=1).update(active=0)
不知何故,我的 Receiver 2
在 Receiver 1
之前发射。
无法在 Django 中明确指定信号的顺序。
处理此问题的最佳方法是让接收器 1 信号本身发送一个信号,您可以让接收器 2 监听该信号。