django m2m_changed信号与定制通过模型 [英] django m2m_changed signal with custom through model

查看:639
本文介绍了django m2m_changed信号与定制通过模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 m2m_changed 信号在我的应用程序
中触发一些操作。然而, signaltest()的打印输出表示我仅在 pre_clear post_clear 动作。我的 models.py 如下所示:

I am trying to use the m2m_changed signal to trigger some actions in my application . However, the printout of signaltest() indicates that I am only signalled on pre_clear and post_clear actions. My models.py looks like this:

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 对象在代码中的其他地方使用以下代码创建:

The EntryField objects are created elsewhere in the code using the following code:

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

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

The first call is responsible for the pre_clear and post_clear events I receive. However, the second call generates no signals.

在我看来, django bug#13757 与这个(mis)行为有关,但我可能会缺少某些东西。

It seems to me that django bug #13757 is related to this (mis)behaviour, but I may be missing something.

有没有办法重新连线信号(可能使用 m2m_changed 之外的一些信号)有 post_save 信号,当 EntryField 创建?

Is there a way to "rewire" the signals (perhaps using some signal other than m2m_changed) to have post_save signals generated when a EntryField is created?

推荐答案

你能试试这个吗?

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

signals.post_save.connect(signaltest, sender=EntryField, weak=False, dispatch_uid='signaltest')

这篇关于django m2m_changed信号与定制通过模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆