2011-07-06 10 views
0

django ormでカテゴリのモデル階層を表現したいと思います。 だからf.i.次のようなカテゴリを持つことができます:階層のdjangoモデルフィールド定義、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() 

これはうまくいく、ちょっとした問題は1つしかない。 カテゴリは、親として自身を指すことはできません。 フォームはすべてのカテゴリが一覧表示されるドロップダウンをレンダリングします。

私は、フィールド定義では、このような何かを試してみました:

limit_choices_to = Q('parentcategory_id' is not id) 

しかし、それは私にエラーを与えました。 おそらくユーザにエラーメッセージをチェックして提示することができますが、別の方法を知っているかもしれません。

+0

'ForeignKey'の' limit_choices_to'属性は、オブジェクトのインスタンス変数にアクセスすることができないので、使用できません。 –

答えて

1

django-mpttは、djangoの階層での作業におすすめです。

+0

うわー、素晴らしい、その感謝を聞いたことがない! – Robse