django m2m_通过定制型号更改信号
我正在尝试使用触发应用程序中的某些操作 . 但是,django m2m_通过定制型号更改信号,django,django-models,django-signals,Django,Django Models,Django Signals,我正在尝试使用触发应用程序中的某些操作 . 但是,signaltest()的打印输出表明,我只在pre\u clear和post\u clear操作上收到信号。我的models.py如下所示: class Entry(models.Model): objects = managers.MyEntryManager() ... fields = models.ManyToManyField('Field', through='EntryField') class Fiel
signaltest()
的打印输出表明,我只在pre\u clear
和post\u 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\u clear
和post\u clear
事件。但是,第二次呼叫不产生信号
在我看来,这似乎与这种(错误的)行为有关,但我可能遗漏了一些东西
是否有一种方法可以“重新布线”信号(可能使用除
m2m\u changed
以外的其他信号),以便在创建入口字段时生成post\u save
信号?您能尝试一下吗
def signaltest(**kwargs):
print kwargs['instance']
print kwargs['created']
signals.post_save.connect(signaltest, sender=EntryField, weak=False, dispatch_uid='signaltest')
有什么原因不将信号处理程序连接到post_save吗?m2m_changed
看起来更合适。如果我对以下行为有一个解释,我不介意使用post\u save
信号:当连接到post\u save
并打印kwargs
时,我得到一个TypeError:“str”对象不可调用。错误是在打印kwargs['instance']
时生成的。奇怪的是,如果我只使用kwargs['instance']
而不打印它,就不会有问题。这使我对是否应该以这种方式使用post\u save
有点怀疑。@ChrisLawlor Ok。我解决了TypeError
问题。毕竟是我的错-在入口字段的实现中错过了%
。\uuuuuunicode\uuuuuuu
(上面未显示)。谢谢action
参数特定于m2m\u changed
信号。因此,您的代码段(连接到post\u save
signal)抛出异常。你确定没有打错字吗?