You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin Sortable 2排序无法保存问题求助

嗨,这种拖拽能生效但排序不保存的情况,大概率是你漏了Django Admin Sortable 2要求的关键配置项,我帮你梳理下需要补的步骤:

1. 给模型添加排序存储字段

Django Admin Sortable 2需要一个专门的字段来记录每个对象的排序位置,你得先在QuickLink模型里补上这个字段:

class QuickLink(models.Model):
    title = models.CharField(max_length=20)
    image = models.FileField(null=True, blank=False, upload_to='your_upload_path')
    # 新增排序字段,用来存储拖拽后的位置
    order = models.PositiveIntegerField(default=0, blank=False, null=False)

    class Meta:
        # 设置后台默认按这个字段排序
        ordering = ['order']

添加完字段后,别忘了执行数据库迁移命令,让这个字段生效:

python manage.py makemigrations
python manage.py migrate
2. 调整Admin类的继承与配置

你的Admin类需要正确继承Django Admin Sortable 2提供的基类,同时显式指定排序字段:

from django.contrib import admin
from adminsortable2.admin import SortableAdmin
from .models import QuickLink

class QuickLinkAdmin(SortableAdmin):
    # 指定我们刚才添加的排序字段(如果你的字段名不是order,这里要改成对应名称)
    sortable_field_name = 'order'
    # 可选:把order字段加到列表展示里,方便直观看到排序值
    list_display = ['title', 'order']

admin.site.register(QuickLink, QuickLinkAdmin)

如果你的Admin类已经继承了其他自定义基类,可以改用SortableAdminMixin混合类:

from adminsortable2.admin import SortableAdminMixin

class QuickLinkAdmin(SortableAdminMixin, admin.ModelAdmin):
    sortable_field_name = 'order'
    list_display = ['title', 'order']
3. 排查自定义save_model方法的问题

如果你的Admin类里自己写了save_model方法,一定要确保调用了父类的save_model逻辑,不然排序的保存代码会被覆盖:

def save_model(self, request, obj, form, change):
    # 你的自定义业务逻辑...
    # 必须加上这一行,保留父类的排序保存逻辑
    super().save_model(request, obj, form, change)

做完这些配置后,再去后台拖拽排序试试,应该就能正常保存排序结果了。如果还是有问题,可以打开浏览器开发者工具,检查拖拽时的网络请求是否正常发送,或者查看数据库里的order字段是否在拖拽后被更新。

内容的提问来源于stack exchange,提问作者samroberts707

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:17:19