我正在尝试使用该m2m_changed
信号来触发我的应用程序中的一些操作。但是,打印输出signaltest()
表明我只收到了信号pre_clear
和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')
使用以下EntryField
代码在代码中的其他位置创建对象:
some_entry.fields.clear()
models.EntryField.objects.get_or_create(
entry=some_entry,
field=some_field,
defaults = { 'value': field_value }
)
第一个电话负责我收到的pre_clear
和事件。post_clear
但是,第二次调用不会产生任何信号。
在我看来,django bug #13757与这种(错误)行为有关,但我可能遗漏了一些东西。
有没有办法“重新连接”信号(可能使用除 之外的其他信号m2m_changed
)以在创建post_save
a 时生成信号EntryField
?