Как правильно удалить дочерний узел в древовидной структуре django-mptt? - PullRequest
0 голосов
/ 25 сентября 2018

Я использую Django:

>>> django.VERSION
(1, 11, 15, u'final', 0)

MPTT:

 django-mptt     0.9.1

В моделях:

from mptt.models import MPTTModel, TreeForeignKey
class Location(MPTTModel):
    id              = models.AutoField(primary_key=True)
    name            = models.CharField(max_length=75,null=False)
    parent          = TreeForeignKey('self', on_delete=models.PROTECT, null=True, blank=True)

Я могу правильно просматривать и добавлять согласно django-mptt документацияНо я не могу удалить дочерний узел.Это портит всю древовидную структуру.Вот как удаление используется в представлениях:

Location.objects.get(id=loc_id).delete()

где loc_id - это идентификатор узла, который я хочу удалить.Я не уверен, как правильно использовать Delete или, возможно, есть ошибка в mptt.Я искал любой пример на его официальном документе.Здесь не сказано ничего, кроме следующего:

class mptt.models.MPTTModel (* args, ** kwargs)

MPTTModel.delete (* args, ** kwargs)
Вызов delete для узла удалит его, а также его полное поддерево, в отличие от повторного присоединения всех подузлов к его родительскому узлу.Для модели MPTT нет аргументов, все аргументы будут переданы непосредственно в Model.delete django.

delete ничего не вернет.

Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Ладно, получается, что на данный момент я могу использовать только правильную структуру таблицы.

Location.objects.rebuild()

Это перестраивает всю структуру таблицы, то есть столбцы lft, rght.Так что мое испорченное дерево снова в порядке.Я использую эту строку после удаления узла.

Возможно, это не идеальное решение.

Я все еще ищу правильный код удаления, потому что восстановление дерева для большого набора данных может занять много времени.

Надеюсь, что кто-то еще может помочь в этом отношении.

...