2017-03-10 89 views
0

在具有M2M關係的模型中。有沒有辦法在信號中得到這個關係的字段的id?從m2m實例獲取ID

class Foo(models.Model): 
    field1 = ... 
    bar = models.ManyToManyField(Bar) 

@receiver(post_save/m2m_changed, sender=Foo) 
def whatever(sender, instance, **kwargs): 
    # get the ID of bar instance here 

我希望能夠得到所使用的Bar實例的id。任何想法?

回答

0

[UPDATE]:

from django.db.models.signals import m2m_changed 

def whatever(sender, instance, **kwargs): 
    print(kwargs['pk_set']) 

m2m_changed.connect(whatever, sender=Foo.bar.through) 

[老]:

instance.bar.values('id')instance.bar.values_list('id', flat=True)

+0

這樣,我會得到所有的關係列表,而不是一個被保存。 – loar

0

使用m2m_changed

@receiver(m2m_changed, sender=Foo) 
def whatever(sender, instance, action, pk_set, **kwargs): 
    if action == "pre_add": 
     print pk_set 

pk_set

對於pre_add,post_add,pre_remove和post_remove操作,這是一組已添加到關係或從關係中刪除的主鍵值。對於pre_clear和post_clear操作,這是None。

https://docs.djangoproject.com/en/1.10/ref/signals/#m2m-changed