基本上,我的问题是如何实现m2m_changed,以便在创建,更新或删除ClassSubjectGrade的实例时,ClassSubjectGrade和Student之间的中间表也会更新 . 例:
-
在编辑ClassSubjectGrade实例时添加更多学生将添加与中间表关联的学生
-
从ClassSubjectGrade实例中删除学生将删除与中间表关联的学生
-
删除ClassSubjectGrade的实例将删除与该实例关联的所有学生
我把我的代码放在下面,但我不确定是否应该检查这两个动作,或者有一个简单的方法来做到这一点 . 我不会在文档中提到如何编写代码来执行我想要的事情,只要我在做上面的3个示例 .
class Student(models.Model):
# some fields
class ClassSubjectGrade(models.Model):
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
# other fields
students = models.ManyToManyField(Student, blank=True)
from django.db.models.signals import m2m_changed
@receiver(m2m_changed, sender=ClassSubjectGrade.students.through)
def students_changed(sender, instance, action, **kwargs):
if action == 'post_remove':
# How to remove all instances in intermediate table of
# ClassSubjectGrade and Student
# of all students that were removed from a ClassSubjectGrade
# instance?
if action == 'post_save':
# How to add instances in intermediate table of ClassSubjectGrade
# and Student
# of all students that were added from a ClassSubjectGrade instance?
class StudentGrade(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
class_subject = models.ForeignKey(ClassSubjectGrade,
on_delete=models.CASCADE)
# some fields