2011-07-06 69 views
0

我想在django orm中表示類別的模型層次結構。 So f.i.你可以有類如:django model層次結構的模型字段定義,GenericForm

TopCategory 
    SubCategory1 
     SubSubCategory 
    SubCategory2 

這是我的字段定義,它指向父類:

class Category(models.Model) 
    parentcategory = models.OneToOneField('self', blank = True, null = True) 

我在視圖中使用GenericForm:

def detail(request, category_id): 
    categoryInstance = Category.objects.get(pk = category_id) 
    GenericForm = modelform_factory(Category) 
    form = GenericForm(instance = categoryInstance) 

    if request.method == 'POST': 
     form = GenericForm(request.POST, instance = categoryInstance) 
     if form.is_valid(): 
      form.save() 

這確實有效,只有一個小問題。 沒有類別應該被允許指向自己作爲父級。 然而,該表格會顯示列出所有類別的下拉列表。

我也嘗試這樣的事情在字段定義:

limit_choices_to = Q('parentcategory_id' is not id) 

但是,這給了我一個錯誤。 我可能會檢查並向用戶顯示錯誤消息,但也許有人知道另一種方式?

+0

恐怕你不能使用'ForeignKey'的'limit_choices_to'屬性,因爲它不能訪問對象的實例變量。 –

回答

1

django-mptt被推薦用於處理django中的層次結構。

+0

哇,真棒,從未聽說過這種感謝! – Robse

相關問題