2017-03-10 4 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) 

[OLD]:

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

+0

この方法では、ない1が保存されています。 – 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

関連する問題