4

我正在尝试使用该m2m_changed信号来触发我的应用程序中的一些操作。但是,打印输出signaltest()表明我只收到了信号pre_clearpost_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_savea 时生成信号EntryField

4

1 回答 1

0

你能试试这个吗?

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

signals.post_save.connect(signaltest, sender=EntryField, weak=False, dispatch_uid='signaltest')
于 2012-10-12T09:09:10.200 回答