我已将 Django Admin Sortable 2 安装到我的 Django 项目中。我可以在管理员中看到拖放订单系统,但是当我移动某些对象时,订单不会保存。当移动对象时,我在终端日志中看不到任何错误。
这是我的模型和管理 python 文件。我需要做任何额外的事情才能保存订单吗?
模型.py
class QuickLink(models.Model):
title = models.CharField(max_length=20)
image = models.FileField(null=True, blank=False,upload_to='media/quick_links')
link = models.CharField(max_length=200)
order = models.PositiveIntegerField(default=0, blank=False, null=False)
def __str__(self):
return self.title
class Meta(object):
ordering = ['order']
管理员.py
from django.contrib import admin
from adminsortable2.admin import SortableAdminMixin
from .models import QuickLink
@admin.register(QuickLink)
class QuickLinksAdmin(SortableAdminMixin, admin.ModelAdmin):
pass
我的版本如下:
姜戈
2.0.4
Python
3.6.1
Django 管理可排序 2
0.6.19
尝试运行管理命令:
./manage.py reorder <app.model>
我在重新排序对象时遇到问题的原因是我在添加可排序功能时已经创建了对象。
当将此默认值设置为 0 时,会将它们全部设置为 0。通过返回并重新创建对象或将数据库中的字段编辑为正确的顺序,我能够修复此问题。
运行此命令以保存排序:
python manage.py reorder <app.model>
运行上面的命令后,您的排序将被保存。
就您而言,我不知道您的应用程序名称,因此如果您的应用程序名称是“store”并且我知道您的型号名称“QuickLink”,那么运行下面的命令将解决您的问题:
python manage.py reorder store.QuickLink
郑重声明,就我而言,由于多种原因而没有记录,每个原因都阻止了索引保存:
1/ 在管理内联中,我在 readonly_fields 中显示了索引。
readonly_fields=[ ...,'myindex',...]
我通过定义一个函数来显示索引解决了这个问题:
readonly_fields=[ ...,'myindex',...]
def index(self,obj): #pour pouvoir afficher l'index
return obj.myindex
2/我的模型中有:
class Meta:
order_with_respect_to = 'series'
并在我的管理内联中:
ordering=['myindex']
为了在 admin_change 页面中按父字段排序的对象将所有相关字段显示在一起 并在内联中按索引排序的记录
...但是当记录在内联中移动时,这会阻止保存索引
因此,我将两者都删除并放入模型中:
class Meta:
ordering=['myindex']
执行这两项更改后,它就可以工作了。 我测试了一下,如果只做了其中一项修改,保存时仍然不记录修改
还可以创建数据迁移,为已创建的模型设置初始顺序。
def reorder(apps, schema_editor):
Tag = apps.get_model("main", "Tag")
for order, item in enumerate(Tag.objects.all()):
item.order = order
item.save()
class Migration(migrations.Migration):
dependencies = [
('main', '0011_auto_20190517_1336'),
]
operations = [
migrations.RunPython(reorder, RunPython.noop),