m2m_changed django中的信号

时间:2013-09-02 09:46:30

标签: django django-models django-signals

我有两个应用程序,A和B

A的models.py是: -

class Channel(models.Model):
    user = models.ForeignKey(User,unique=True)
    name = models.CharField(max_length=100)
    events = models.ManyToManyField(Event,null=True,blank=True)

    def __unicode__(self):
        return self.name

B的models.py是: -

class Event(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

我正在尝试使用m2m_changed Signal在新事件添加到给定Channel实例时执行某些操作。

问题在于,当它被添加到Channel的实例时,我无法找到知道事件id的方法。 我检查了文档: - https://docs.djangoproject.com/en/dev/ref/signals/

有pk_set。但问题是,当我向Channel的给定实例添加新事件时,它也会显示先前添加的事件的ID。我只是想知道最新添加事件的ID。

这怎么可能? 希望我的问题很明确...... 在此先感谢:)

1 个答案:

答案 0 :(得分:3)

以下对我有用......

def event_handler(sender, instance, **kwargs):
    if kwargs['action'] == "post_add" and kwargs["model"] == Event:
        # instance.events.latest('pk') is the latest event

m2m_changed.connect( event_handler, sender= Channel.events.through )