2016-02-03 40 views
0

我正在使用Python 2.7和Django 1.7.9。我已經基於Django的MPTT和模型ManyToManyField分類等級:將父類別自動添加到模型的ManyToManyField時,將其分配給子類別

class Item(models.Model): 
    category = models.ManyToManyField(Category)  
    title = models.CharField(max_length=255) 

分配給它的孩子類別時我怎樣才能自動添加父類的項目的ManyToManyField?例如。我有一個名爲「音樂」的父類別,其中有子類別,「搖滾」,「金屬」,「經典」等。 當我爲該項目指定「經典」時,必須自動添加「音樂」。 什麼是正確的做法?我試圖這樣做,這是錯誤的:

def save(self, *args, **kwargs):         
      if self.category.parent: 
       for parent in self.category.get_ancestors: 
        self.category.add(parent)     
      super(Item, self).save(*args, **kwargs) 
+0

爲什麼它是錯誤的,它給你什麼?什麼是get_ancestors是? –

+0

django-mptt文檔有幫助嗎? http://django-mptt.github.io/django-mptt/tutorial.html有一個相當類似的例子 – djq

+0

get_ancestors() - 給出所有的父類別。 ManyToManyField項目在保存之前不能添加到模型中。我知道這個django-mptt的例子,但這不是我所需要的。 – Swallow

回答

0

Finnaly我已經找到了我自己的解決方案。

from django.db.models.signals import m2m_changed 

def add_parent_categ(sender, instance,action,reverse, *args, **kwargs): 
if action == 'post_add' and not reverse:  
    for categ in instance.category.all():   
     for parent in categ.get_ancestors(): 
      if parent not in instance.category.all():      
       instance.category.add(parent) 
m2m_changed.connect(add_parent_categ, sender=Item.category.through) 
相關問題