2011-02-28 70 views
2

我已經建立了一個網站,按類別和兒童(子)類別分類產品。django:子類別和他們的父母

這是我的模型:

class Category(models.Model): 
    name = models.CharField(max_length=250) 
    parent = models.ForeignKey('self', related_name='children') 
    ... 

class Product(models.Model): 
    category = models.ForeignKey(Category) 
    name = models.CharField(max_length=250) 
    ... 

上呈現的類別來看,我有這樣的:

def some_view(request, category): 
    category_list = Category.objects.filter(parent__isnull=True) 
    product_list = Product.objects.filter(category=category) 

我的模板顯示一切正常:

<ul> 
    {% for category in category_list %} 
    <li> 
     <a href="{{ category.get_absolute_url }}">{{ category.name }}</a> 
     <ul> 
      {% for child in category.children.all %} 
      <li><a href="{{ child.get_absolute_url }}">{{ child.name }}</a></li> 
      {% endfor %} 
     </ul> 
    </li> 
    {% endfor %} 
</ul> 

我可以成功顯示類別和他們的孩子。我的問題是,我正在使用子類別來進一步過濾產品,但它們也應屬於主要類別。例如:

Books 
--- Comics 
--- Sci-Fi 
--- ... 
Music 
--- Classical 
--- Pop 
--- ... 

如果我在分類「圖書>漫畫」一個產品,我會,如果我在我的模板類別列表中選擇「漫畫」獲得該產品。但是,選擇「書籍」也應該列出該產品,因爲它是最高類別,但除非我將它們分類爲父類別「書籍」,否則不會顯示任何產品。 我不確定如何以更好的方式解釋這一點,但我基本上希望能夠顯示屬於子類別的所有產品,但是當我選擇主類別時,該產品也應該在那裏,我似乎無法使其工作。有什麼建議嗎?

+0

注意我知道django-mptt,但我已經在數據庫中插入了大約100種產品,所以它不是一個選項。 – 2011-02-28 18:33:37

回答

1

關上了我的頭,以實現最簡單的是,

變化從產品的外鍵類別多到多,然後覆蓋你的模型保存,使得其自動分配父類別到每個類別的產品。

但更好的解決方案是(我讀你的評論,即時通訊仍然這樣說),實施django-mptt和使用南[http://south.aeracode.org/docs/tutorial/part3.html]來處理數據遷移。

+0

嗯,我明白你的意思。我會嘗試實現django-mptt :) – 2011-03-01 11:30:51