使用django-ordered-model,如何让move_up_down_links显示在ListAdmin页面?
问题修复方案
你的问题出在ListItem模型未配置基于父List的独立排序规则,导致Inline中的move_up_down_links无法生成有效链接。以下是具体修复步骤:
1. 修改models.py中的ListItem模型
在ListItem的Meta类中添加order_with_respect_to = 'list',同时移除原有的ordering = ["order"](因为order_with_respect_to会自动维护每个List下的排序顺序):
class ListItem(OrderedModel): """ Represents an item of the user-created book list. """ list = models.ForeignKey( verbose_name=_("список"), to=List, on_delete=models.CASCADE, related_name="items", ) # ... 其余字段保持不变 ... class Meta: order_with_respect_to = 'list' # 关键:指定每个List下的ListItem独立排序 verbose_name = _("элемент списка") verbose_name_plural = _("элементы списков")
2. 验证Admin配置(无需修改)
你的admin.py配置已经满足要求:
ListItemInline继承了OrderedTabularInline,并正确包含move_up_down_links字段ListAdmin继承了OrderedInlineModelAdminMixin,这是Inline排序功能的必要条件
为什么这样修复?
django-ordered-model中,当子模型(ListItem)需要在父模型(List)的Inline中独立排序时,必须通过order_with_respect_to指定父关联字段。没有这个配置时,排序是全局的,Inline上下文无法生成针对当前List的移动链接,导致"Move"列显示为空。
修改后,两个Admin页面的move_up_down_links都会正常显示,且每个List下的ListItem排序独立于其他List。
内容的提问来源于stack exchange,提问作者Hazadus
相关产品推荐
相关产品推荐

