层次结构的Django模型字段定义,GenericForm

时间:2011-07-06 12:13:15

标签: django django-models

我想在django orm中表示类别的模型层次结构。 所以f.i.你可以有以下类别:

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)

但这给了我一个错误。 我可能会检查并向用户显示错误消息,但也许有人知道另一种方式?

1 个答案:

答案 0 :(得分:1)

建议使用

django-mptt来处理django中的层次结构。