LINUX.ORG.RU

Деревья в админке Django

 ,


0

1

Всем привет!

Потребовалось встроить в админку джанги дерево, ввиду чего нашелся пакет 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)
★★

Я когда-то сделал админку с деревом(jstee) для mptt https://github.com/avostryakov/mpttadmin но она для дремучей версии джанго и скорее всего не заработает на новых.

Может Author тоже должен быть MPTTModel?

pawnhearts ★★★★★ ()
Ответ на: комментарий от pawnhearts

Не. я так думал запретить авторам иметь парентов.

Или может лучше TreeBeard?

aido ★★ ()
Ответ на: комментарий от aido

В treebeard просто 3 алгоритма на выбор. Меня mptt устраивал и я юзал её.

Я просто подозреваю, что твоя ошибка «'Manager' object has no attribute 'disable_mptt_updates'» связана с тем, что Author это не MPPTModel, вот этого метода и нет.

Ты уверен, что тебе деревья именно нужны, а ForeignKey не обойтись?

pawnhearts ★★★★★ ()

Тебе надо, чтобы на одной странице админки разные модели были? ModelAdmin работает ровно с одной моделью. По-моему, проще свою страницу со своим шаблоном в админку встроить.

gasinvein ★★★ ()
Ответ на: комментарий от pawnhearts

Ты уверен, что тебе деревья именно нужны, а ForeignKey не обойтись?

Уверен.

disable_mptt_updates проверю позже. Пока что я хз, как сделать отображение нескольких моделей на странице админки.

aido ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.