Django 管理员可排序 2 不保存顺序



我已经将Django Admin Sortable 2安装到我的Django项目中。我可以在管理员中看到拖放订单系统,但是当我移动某些对象时,订单不会保存。移动对象时,我的终端日志中也看不到任何错误。

这是我的模型和管理 python 文件。我需要做任何额外的事情来保存订单吗?

Model.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']

Admin.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

蟒蛇3.6.1

Django Admin Sortable 20.6.19

尝试运行管理命令:./manage.py reorder <app.model>

我在重新排序对象时遇到问题的原因是,在添加可排序功能时,我已经创建了对象。

当将此默认值设置为 0 时,它会将它们全部设置为 0。通过返回并重新创建对象或将数据库中的字段编辑为正确的顺序,我能够解决此问题。

运行以下命令以保存排序:

python manage.py reorder <app.model>

运行上面的命令后,您的排序将被保存。

在您的情况下,我不知道您的应用程序名称,因此如果您的应用程序名称是"商店">并且我知道您的型号名称"QuickLink">,因此运行以下命令将解决您的问题:

python manage.py reorder store.QuickLink

还可以创建数据迁移,为已创建的模型设置初始顺序。

def reorder(apps, schema_editor):
Tag = apps.get_model("main", "Tag")
order = 0
for item in Tag.objects.all():
order += 1
item.order = order
item.save()

class Migration(migrations.Migration):
dependencies = [
('main', '0011_auto_20190517_1336'),
]
operations = [
migrations.RunPython(reorder, RunPython.noop),

作为记录,就我而言,由于几个原因,它没有记录,每个原因都阻止了索引保存:

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']

执行这两项更改后,它就可以工作。 我测试过,如果只完成了其中一个更改,则在保存时仍然不会记录更改

最新更新