Метод сохранения модели 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...