2014-09-30 45 views
1

我正嘗試使用post_save觸發器中的ManyToMany字段。 爲例ManyToMany字段未在pre_(post_)保存觸發器中分配

@receiver(post_save, sender=Post, dispatch_uid='update_post_images') 
def update_post_images(sender, instance, using, **kwargs): 
    post_save.disconnect(update_post_images, sender=Post, dispatch_uid='update_post_images') 
    print 'before', instance.images.all() 
    img = Image.object.get(pk=1469) 
    instance.images.add(img) 
    print 'after', instance.images.all() 
    post_save.connect(update_post_images, sender=Post, dispatch_uid='update_post_images') 

現在,當我看向Django的控制檯我看正是我想要的。 print 'before'輸出一個圖像對象和print 'after' - 2個對象 但是,當我從python控制檯(manage.py shell)查詢相同的後對象時,我看到只有一個圖像。

請有人告訴我什麼是這個觸發

回答

0

ManyToManyFields行爲不同於與信號等領域wrng。檢查m2m_changed Signal並運行你的邏輯信號,而不是post_save信號。

+0

我認爲這不是我所需要的。我再一次需要在post_save觸發器中爲ManytoMany字段填充一些值。例如,用戶在模型Post中更改了文本字段。在post_save我解析文本的img標籤並填充Post.images - 字段與這些值 – 1099511627776 2014-09-30 08:17:24

+1

經過一番調查後,我發現這個:http://stackoverflow.com/questions/4432385/django-how-to-save- m2m數據通過後保存信號鏈接,它工作得很好。所以你確實是對的 – 1099511627776 2014-09-30 16:27:48