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イベントを担当します。ただし、2 番目の呼び出しではシグナルは生成されません。

django バグ #13757がこの (誤った) 動作に関連しているように思えますが、何かが欠けている可能性があります。

が作成されたときに信号を生成するために、信号を「再配線」する方法はありますか (おそらく 以外の信号を使用m2m_changed) 。post_saveEntryField

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 に答える