dajngo-admin-sortable2不对SortableAdminMixin进行排序

时间:2019-11-06 11:20:51

标签: python django django-admin

我用django和python3创建了一个包含几个教程的应用程序,这些教程又包含了保存在另一个表中的多个内容条目。每个教程都由练习教程模型中的一个条目表示。我希望能够对django管理面板中的教程和内容进行排序。对于SortableInlineAdminMixin类的内联教程内容,它工作正常。如果我从头开始创建新教程而又没有保存任何对象,那也可以很好地工作(如果我克隆此项目并从头开始设置它,则可以在我的电脑上本地工作)

我现在的问题是,我的应用程序设置就像您在带有apache的ubuntu服务器上的代码和下面的图片中看到的那样,但是我无法对教程进行排序(内联内容仍然可以正常工作)。如果我将它们拖放到新位置并重新加载,它们将不会保存在新位置,而是会退回到原来的位置。

教程和教程内容模型:

from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField


# Page for tutorials
class Tutorial(models.Model):
    title = models.CharField(max_length=60)
    order = models.PositiveIntegerField(default=0, null=False, unique=True)

    # Timestamp
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['order']

    def __str__(self):
        return self.title


# Content for tutorials
class TutorialContent(models.Model):
    lesson_page = models.ForeignKey(Tutorial, related_name='tutorial_content', on_delete=models.CASCADE)
    content = RichTextUploadingField()
    order = models.PositiveIntegerField(default=0, null=False)

    # Timestamp
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['order']

    def __str__(self):
        description = 'Order - ' + str(self.order)
        return description

教程和TutorialContent管理员:

from django.contrib import admin
from .models import Tutorial, TutorialContent
from adminsortable2.admin import SortableInlineAdminMixin, SortableAdminMixin


class TutorialContentInline(SortableInlineAdminMixin, admin.TabularInline):
    model = TutorialContent


class TutorialAdmin(SortableAdminMixin, admin.ModelAdmin):
    model = Tutorial
    inlines = [TutorialContentInline]
    list_display = ['title']


admin.site.register(Tutorial, TutorialAdmin)

Django管理教程模型面板:

Django admin tutorial model panel

相应表的

SQLite3视图:

enter image description here

1 个答案:

答案 0 :(得分:0)

也许有点迟,但是:

如果在模型中添加adminsortable2字段时,数据库中已经存在一些模型实例,则排序将不起作用,您需要使用以下命令首次构建订单:

python manage.py reorder your_app.YourModel

来源:https://django-admin-sortable2.readthedocs.io/en/latest/usage.html#initial-data

希望这会有所帮助。