2013-08-30 66 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