Django Admin Sortable 2不保存订单

时间:2018-05-02 11:09:57

标签: python django sorting django-admin

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

这是我的Model和Admin 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

我的版本如下:

Django 2.0.4

Python 3.6.1

Django Admin Sortable 2 0.6.19

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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),

答案 3 :(得分:0)

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

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

同时执行两个更改,即可正常工作。 我测试了一下,如果仅完成一项更改,保存时它仍然不会记录更改