2013-08-30 101 views
0

的所有模型實例我有一個層次結構如下所示:Django的:獲取頂級類別

Parent Cat 
    Sub Cat 
     Item 
    Sub Cat 
     Item 
     Item 
Parent Cat 
... 

,其命名爲一個父類的/比如我想獲得它涉及到所有的項目父母的貓。我目前正在使用Django-Categories,它使用Django-MTPP,但我無法弄清楚如何在沒有自己構建for循環的情況下做到這一點。認爲這些軟件包的全部重點都是這樣,我不會那麼做。

我的模式是這樣的:

class Item(models.Model): 
    title = models.TextField() # `null` and `blank` are false by default 
    category = models.ForeignKey('ProductCategory') 
    price = .... 

    def __unicode__(self): # Python 3: def __str__(self): 
     return self.title 

from categories.models import CategoryBase 

class ProductCategory(CategoryBase): 

    class Meta: 
     verbose_name_plural = 'simple categories' 

我試着這樣做:

parent_category = ProductCategory.objects.get(slug=parent_cat, parent=None) 
items = parent_category.item_set.all() 

但是,這不會產生任何結果。

回答

2

你應該過濾你的項目:

items = Item.objects.filter(category__parent=parent_category) 

雙得分是用於跟蹤模型關係或使用更復雜的查詢比簡單的相等。文檔here

+0

這是我嘗試的第一件事,並沒有產生任何結果。我假設,因爲類別設置爲子類別,而不是父類別 – KingFu

+0

@KingFu從你的代碼,我會說相反:你的類別設置爲父類:)我沒有Django類別的經驗,但你可以嘗試'items = Item.objects.filter(category__parent = parent_category)'。如果有效,我會更新答案 – Germano

+0

啊完美的作品!雖然我不確定雙下劃線是如何工作的,但是'category__parent = parent_category'基本上說'如果類別是父類== parent_category'?你能否更新你的答案,我會接受它,謝謝 – KingFu