在管理中订购django mptt外键不起作用
我使用django mptt创建类别模型,然后将其用作文档模型的外键。类别管理工作正常,类别按预期的树顺序显示。但是,我在管理中对文档模型的排序有两个问题 管理员列表中的文档是按id顺序而不是类别顺序列出的 编辑屏幕中类别的下拉列表按类别id顺序列出。请注意,出于另一个原因,我将抽象类用于category 为什么我在模型中指定的顺序被忽略 Models.py在管理中订购django mptt外键不起作用,django,django-mptt,Django,Django Mptt,我使用django mptt创建类别模型,然后将其用作文档模型的外键。类别管理工作正常,类别按预期的树顺序显示。但是,我在管理中对文档模型的排序有两个问题 管理员列表中的文档是按id顺序而不是类别顺序列出的 编辑屏幕中类别的下拉列表按类别id顺序列出。请注意,出于另一个原因,我将抽象类用于category 为什么我在模型中指定的顺序被忽略 Models.py class Category(MPTTModel): parent = models.ForeignKey('self', relate
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')
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')
管理员
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__tree_id', 'category__lft', 'title')
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__lft',)
更新修复:
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')
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')
管理员
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__tree_id', 'category__lft', 'title')
class DocAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category')
list_filter = ('author','category')
ordering = ('category__lft',)
好-找到了一些持久的答案: 为什么显示列表顺序不正确?因为它只使用第一个字段: ModelAdmin.ordering将排序设置为 指定对象列表的显示方式 在Django管理视图中排序。 这应该是列表中的列表或元组 与模型的订购格式相同 参数 如果没有提供,Django 管理员将使用模型的默认值 订购 注:Django只会尊重第一个 列表/元组中的元素;还有其他的吗 将被忽略
为什么选择下拉列表的顺序不正确?因为我必须在子类中有一个顺序,而不仅仅是抽象模型。没有尝试过,只需阅读文档:
在Django 1.4中更改:Django管理员尊重列表/元组中的所有元素;在1.4版本之前,只有第一个版本受到尊重。