django-mptt标准ModelAdmin中的嵌套下拉列表?

时间:2012-02-27 01:17:47

标签: python django mptt

我正在使用django-mptt作为Category模型,这是Project模型的外键:

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class Category(MPTTModel):
    name = models.CharField(max_length=255)
    parent = TreeForeignKeyY('self',
            null=True, 
            blank=True, 
            related_name='children'
            )

class Project(models.Model):
    name = models.CharField(max_length=255)
    category = models.ForeignKey('Category')

使用Category设置MPTTModelAdmin管理员很容易,并提供了一个很好的嵌套下拉列表来挑选parent类别:

from django.contrib import admin
from mptt.admin import MPTTModelAdmin
from myapp.models import Category, Project

admin.site.register(Category, MPTTModelAdmin)

现在,我想在我的Category管理员中添加一个漂亮的嵌套Project下拉列表,但标准admin.ModelAdmin不包含此功能,并且子类MPTTModelAdmin没有'似乎工作:

  

Project没有名为'parent'的字段

是否可以模仿非MPTT管理工具中的嵌套下拉列表?

1 个答案:

答案 0 :(得分:4)

您仍然可以在非TreeForeignKey上使用MPTTModel,假设链接的模型是MPTTModel,即:

class Project(models.Model):
    name = models.CharField(max_length=255)
    category = TreeForeignKey('Category')

或者,您可以在表单中将该字段设为mptt.forms.TreeNodeChoiceFieldmptt.forms.TreeNodeMultipleChoiceField的实例。