Django 覆盖模型保存方法来检查多对多字段是否已更改

问题描述 投票:0回答:1

所以我有一个模型,我需要覆盖保存属性来检查多对多关系是否已更改。通常,对于 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

知道如何为多对多领域制作这样的东西吗?

python django model
1个回答
2
投票

信号怎么样?请在

此处
查看m2m_changed信号文档。

您可以像这样使用它:

from django.db.models.signals import m2m_changed
from django.dispatch import receiver

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

    # do stuff to the Interest instance:
    instance...
© www.soinside.com 2019 - 2024. All rights reserved.