Я использую django-mptt для создания модели категорий, а затем использую ее в качестве внешнего ключа для модели документов. Администратор категорий работает нормально, и категории отображаются в древовидном порядке, как и ожидалось. Однако у меня есть две проблемы с заказом модели документа в админке.
Документы в списке администратора перечислены в порядке идентификаторов, а не в порядке категорий
Раскрывающийся список «Категория» на экране редактирования отображается в порядке идентификатора категории. Обратите внимание, что я использовал абстрактный класс для категории по другой причине.
Почему порядок, указанный в модели, игнорируется?
Models.py
class Category(MPTTModel):
parent = models.ForeignKey('self', related_name="children")
name = models.CharField(max_length=100)
class Meta:
abstract = True
ordering = ('tree_id', 'lft')
class MPTTMeta:
ordering = ('tree_id', 'lft')
order_insertion_by = ['name',]
class CategoryAll(Category):
class Meta:
verbose_name = 'Category for Documents'
verbose_name_plural = 'Categories for Documents'
class Document(models.Model):
title = models.CharField(max_length=200)
file = models.FileField(upload_to='uploads/library/all', blank=True, null=True)
category = models.ForeignKey(CategoryAll)
class Meta:
ordering = ('category__tree_id', 'category__lft', 'title')
Admin.py
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__tree_id', 'category__lft', 'title')
ОБНОВЛЕНИЕ ОБНОВЛЕНО:
Models.py
class Category(MPTTModel):
parent = models.ForeignKey('self', related_name="children")
name = models.CharField(max_length=100)
class Meta:
abstract = True
class MPTTMeta:
order_insertion_by = ['name',]
class CategoryAll(Category):
class Meta:
verbose_name = 'Category for Documents'
verbose_name_plural = 'Categories for Documents'
ordering = ('lft',)
class Document(models.Model):
title = models.CharField(max_length=200)
file = models.FileField(upload_to='uploads/library/all', blank=True, null=True)
category = models.ForeignKey(CategoryAll)
class Meta:
ordering = ('category__tree_id', 'category__lft', 'title')
Admin.py
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__lft',)