2012-02-27 4 views
2

J'utilise django-mptt pour un modèle Category, qui est une clé étrangère à un modèle Project:django-mptt liste déroulante imbriquée dans ModelAdmin standard?

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') 

Il est facile de configurer le Category administration à l'aide MPTTModelAdmin, avec une belle liste déroulante imbriquée pour choisir parent catégorie :

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

admin.site.register(Category, MPTTModelAdmin) 

maintenant, je voudrais inclure une belle nichée Category déroulant dans mon Project admin, mais le admin.ModelAdmin standard ne comprend pas t sa fonctionnalité et subclassing MPTTModelAdmin ne semble pas fonctionner:

projet n'a pas de champ nommé « parent »

Est-il possible d'imiter le menu déroulant imbriqué dans un outil d'administration non-MPTT?

+0

Il y a une faute de frappe "TreeForeignKeyY" – blissini

Répondre

4

Vous pouvez toujours utiliser TreeForeignKey sur un MPTTModel non, en supposant que le modèle lié est un MPTTModel, i.e. .:

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

Vous pouvez rendre le champ une instance de mptt.forms.TreeNodeChoiceField ou mptt.forms.TreeNodeMultipleChoiceField sur votre formulaire.