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
相关产品推荐
相关产品推荐

