【问题标题】:dajngo-admin-sortable2 doesn't sort order of SortableAdminMixindjango-admin-sortable 2 不对 Sortable Admin Mixin 进行排序
【发布时间】:2019-11-06 11:20:51
【问题描述】:

我使用 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

教程和教程内容管理员:

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 管理员教程模型面板:

对应表的SQLite3视图:

【问题讨论】:

    标签: python python-3.x django django-models django-admin


    【解决方案1】:

    也许有点晚了,但是:

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

    python manage.py reorder your_app.YourModel
    

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

    希望这能有所帮助。

    【讨论】:

      【解决方案2】:

      运行此命令以保存您的排序:

      python manage.py reorder <app.model>
      

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

      就您而言,我不知道您的应用名称,所以如果您的应用名称是“study”,而我知道您的型号名称为“Tutorial”和“TutorialContent” 所以在下面运行这个命令可以解决你的问题:

      python manage.py reorder study.Tutorial study.TutorialContent
      

      【讨论】:

        猜你喜欢
        • 2018-10-12
        • 2012-10-21
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2022-01-24
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多