По сути, мой вопрос заключается в том, как мне реализовать m2m_changed, чтобы при создании, обновлении или удалении экземпляра ClassSubjectGrade также обновлялась промежуточная таблица между ClassSubjectGrade и Student.Пример:
Добавление большего количества учеников при редактировании экземпляра ClassSubjectGrade добавит учеников, связанных с промежуточной таблицей
Удаление учеников из экземпляраClassSubjectGrade удалит тех учеников, которые связаны с промежуточной таблицей
Удаление экземпляра ClassSubjectGrade удалит всех учеников, связанных с этим экземпляром
Я разместилмой код ниже, но я также не уверен, стоит ли мне проверять эти 2 действия или есть простой способ сделать это.Я также не вижу в документации того, как писать код, чтобы делать то, что я хочу, всякий раз, когда я делаю 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