Всем привет!
Потребовалось встроить в админку джанги дерево, ввиду чего нашелся пакет django-mptt-admin. Хочется сделать строгую иерархию классов и дерева, с ней связанного. То есть, чтобы нельзя было создать Author, у которого родитель - тоже Author. Author может иметь в качестве листьев только Article, а Article - только Remark. Еще может понадобится сделать это не на отдельной странице админки, а в форме.
Пока накидал вот такой код, но у него есть ещё одна проблема(помимо несоблюдающейся иерархии) - При удалении элемента вылазит ошибка AttributeError: 'Manager' object has no attribute 'disable_mptt_updates'
# core/models.py
from django.db import models
from mptt.fields import TreeForeignKey
from mptt.models import MPTTModel
import mptt
class Author(models.Model):
name = models.CharField(default="dummy", max_length=128)
class Meta:
ordering = ['tree_id', 'lft']
def __str__(self):
return self.name
TreeForeignKey(Author, blank=True, null=True, db_index=True).contribute_to_class(Author, 'parent')
mptt.register(Author, order_insertion_by=['name'])
class Article(MPTTModel):
name = models.CharField(default="dummy", max_length=128)
parent = TreeForeignKey('Author', null=True, blank=True, related_name='children')
class Meta:
ordering = ['tree_id', 'lft']
def __str__(self):
return self.name
class Remark(MPTTModel):
name = models.CharField(default="dummy", max_length=128)
parent = TreeForeignKey('Article', null=True, blank=True, related_name='children')
class Meta:
ordering = ['tree_id', 'lft']
def __str__(self):
return self.name
#core/admin.py
from django.contrib import admin
from feincms.admin import tree_editor
from core.models import Author
class AuthorAdmin(tree_editor.TreeEditor):
pass
admin.site.register(Author, AuthorAdmin)