django m2m_changed 信号通过模型自定义

2024-01-28

我正在尝试使用m2m_changed signal https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed触发我的应用程序中的一些操作 。然而,打印输出signaltest()表示我仅收到信号pre_clear and post_clear行动。我的models.py看起来像这样:

class Entry(models.Model):
    objects = managers.MyEntryManager()
    ...
    fields = models.ManyToManyField('Field', through='EntryField')

class Field(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.CharField(max_length=256, blank=True)

class EntryField(models.Model):
    entry = models.ForeignKey('Entry')
    field = models.ForeignKey('Field')
    value = models.CharField(max_length=256)

def signaltest(**kwargs):
    print kwargs['action']
signals.m2m_changed.connect(signaltest, sender=Entry.fields.through, weak=False, dispatch_uid='signaltest')

The EntryField使用以下代码在代码中的其他位置创建对象:

some_entry.fields.clear()
models.EntryField.objects.get_or_create(
    entry=some_entry,
    field=some_field,
    defaults = { 'value': field_value }
)

第一个调用负责pre_clear and post_clear我收到的事件。但是,第二次调用不会生成任何信号。

在我看来,这Django 错误 #13757 https://code.djangoproject.com/ticket/13757与这种(错误)行为有关,但我可能遗漏了一些东西。

有没有办法“重新连接”信号(也许使用除m2m_changed) 具有post_save当一个信号产生EntryField被建造?


你能试试这个吗?

def signaltest(**kwargs):
   print kwargs['instance']
   print kwargs['created']

signals.post_save.connect(signaltest, sender=EntryField, weak=False, dispatch_uid='signaltest')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django m2m_changed 信号通过模型自定义 的相关文章

随机推荐