MPTT - Как переопределить "tree_id"

Я хочу переопределить поле tree_id следующим образом:

Дано:

class Thing(MPTTModel):
    thing_id = models.AutoField(primary_key=True)
    ...

    class MPTTMeta:
        tree_id = ?

При создании первого родителя "Thing" я хочу инициировать tree_id с назначенным thing_id при первом сохранении объекта.

Далее, для объектов "Thing", созданных позже, я хочу передать thing_id первого родителя, созданного ранее.

т.е. все узлы в дереве будут иметь в качестве tree_id идентификатор объекта (thing_id) первого предка.

Является ли это возможным?

Как мне передать значение при создании объектов "Thing"?

Редактировать:

Таким образом, кажется, что решение для моих нужд просто: Thing.objects.get(pk=thing_id).get_descendants()

1 ответ

Решение

Я не знаю, что ты пытаешься сделать. tree_id это django-mptt внутреннее поле, оно не имеет большого значения вне алгоритма mptt.

Может быть, вы пытаетесь отсортировать свое дерево по thing_idтак, чтобы вещи с древнейшими предками появились первыми на дереве? Я не знаю, почему вы хотите это сделать, но если это так, вы, вероятно, должны использовать order_insertion_by,

class MPTTMeta:
    order_insertion_by = ['thing_id']

Документы: http://django-mptt.github.com/django-mptt/models.html

Другие вопросы по тегам