Метод сохранения модели Django overwrite для проверки, изменилось ли поле "многие ко многим

Итак, у меня есть модель, для которой мне нужно перезаписать свойство save, чтобы проверить, изменилось ли отношение "многие ко многим". Обычно для поля типа char можно сделать что-то вроде следующего, но для отношений "многие ко многим" это работает по-другому.

class Interest(TimestampedModel):
    subjects = models.ManyToManyField('genre.Subject', blank=True)

    def save(self, *args, **kwargs):
        if self.id:
            old_subjects = Interest.objects.filter(pk=self.pk).first().subjects.all()
            subjects = self.subjects.all()
            if subjects != old_subjects:
                # Do stuff

Есть идеи, как сделать что-то подобное для поля "многие ко многим"?

Как насчет сигнала? Посмотрите документацию по сигналам m2m_changed здесь .

Вы можете использовать его следующим образом:

from django.db.models.signals import m2m_changed

@receiver(m2m_changed, sender=Interest.subjects.through)
def video_category_changed(sender, instance, **kwargs):

    # do stuff to the Interest instance:
    instance...
Вернуться на верх