【问题标题】:Django Admin Sortable 2 Not Saving OrderDjango Admin Sortable 2不保存订单
【发布时间】:2018-10-12 11:30:40
【问题描述】:

我已将 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']

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

Python3.6.1

Django Admin Sortable 2 0.6.19

【问题讨论】:

    标签: python django sorting django-admin


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          作为记录,在我的情况下,它没有记录,因为有几个原因都阻止了索引保存:

          1/ 在 admin inline 中,我在 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']
          

          执行这两项更改后,它就可以工作了。 我测试过,如果只做了一项更改,保存时仍然不记录更改

          【讨论】:

            猜你喜欢
            • 2022-01-24
            • 1970-01-01
            • 1970-01-01
            • 2012-10-21
            • 1970-01-01
            • 1970-01-01
            • 2013-08-02
            • 1970-01-01
            • 2011-10-22
            相关资源
            最近更新 更多