Django admin mptt: как показать TreeNodeChoiceField вместо ModelChoiceField при добавлении/изменении с помощью FK
Я работаю над приложением для django, которое включает некоторые модели деревьев на основе mptt.
У меня есть такие модели (упрощенные):
class Asset_Type(MPTTModel):
parent = TreeForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, related_name='children', verbose_name='Parent')
name = models.CharField(max_length=64, unique=True, verbose_name='Asset Type Name')
class Asset(models.Model):
name = models.CharField(max_length=64, unique=True, verbose_name='Asset Name')
type = models.ForeignKey(Asset_Type, on_delete=models.CASCADE, blank=False, null=False)
У меня объявлены такие классы администраторов (упрощенно):
class Asset_TypeAdmin(DraggableMPTTAdmin):
mptt_level_indent = 20
admin.site.register(models.Asset_Type, Asset_TypeAdmin)
class AssetAdmin(admin.ModelAdmin):
list_display = ['name','type']
list_display_links = ['name']
admin.site.register(models.Asset, AssetAdmin)
Все работает почти идеально, кроме этого:
Когда я добавляю новый актив, я получаю шаблон/форму с выпадающим списком, где я могу выбрать Asset_Type. Проблема в том, что выпадающий список имеет класс ModelChoiceField, поэтому он не показывает иерархию дерева. В выпадающем списке отображается следующее:
---------
Root 1
Child 1.1
Child 1.1.1
Root 2
Child 2.1
Child 2.1.1
Я бы хотел, чтобы это был класс TreeNodeChoiceField, чтобы он показывал следующее:
Root 1
--- Child 1.1
------ Child 1.1.1
Root 2
--- Child 2.1
------ Child 2.1.1
Я нашел информацию, связанную с этим здесь: https://django-mptt.readthedocs.io/en/latest/forms.html#id4, но, честно говоря, я понятия не имею, как/где я должен сказать django, что поле для использования в форме добавления/изменения должно быть TreeNodeChoiceField. Я успешно переопределил шаблон change_form.html для админки для класса assets моего приложения (создав ./project/app/templates/admin/app/asset/change_form.html), но я не могу найти, где указать в этом файле (или где-либо еще), какое поле использовать