跳转到主要内容

通过抽象基类和管理类将手动排序顺序添加到Django对象中。

项目描述

Django Orderable

通过抽象基类和管理类将手动排序顺序添加到Django对象中。项目包括

  • 抽象基类模型
  • 管理类
  • 内联管理类
  • 管理模板

演示

django-orderable demo

安装

从PyPI获取

pip install django-orderable

添加到您的INSTALLED_APPS

...
'orderable',
...

子类化Orderable类

from orderable.models import Orderable


class Book(Orderable):
    ...

子类化适当的Orderable管理类

from orderable.admin import OrderableAdmin, OrderableTabularInline


class SomeInlineClass(OrderableTabularInline):
    ...

class SomeAdminClass(OrderableAdmin):
    list_display = ('__unicode__', 'sort_order_display')
    ...

Admin中使用了jQuery和jQuery UI的拖放UI。您可以使用自己的版本覆盖它(而不是使用Google的CDN)

class SomeAdminClass(OrderableAdmin):
    class Media:
        extend = False
        js = (
            'path/to/jquery.js',
            'path/to/jquery.ui.js',
        )

注意

class Meta

如果您的Orderable子类定义了class Meta,则确保它子类化Orderable.Meta,以便模型按sort_order排序。即

class MyOrderable(Orderable):
    class Meta(Orderable.Meta):
        ...

自定义管理器

同样,如果您的模型有自定义管理器,则使用orderable.managers.OrderableManager代替django.db.models.Manager。

事务

保存可排序模型会引发大量数据库查询,并且为了避免竞争条件,应在事务中运行。

将Orderable添加到现有模型

您需要填写所需的 sort_order 字段。通常,这是通过在一个迁移中添加该字段并默认设置为 0 来完成的,然后创建一个数据迁移来设置其值为主键的值

for obj in orm['appname.Model'].objects.all():
    obj.sort_order = obj.pk
    obj.save()

使用 Orderable 的多个模型

当多个模型继承自 Orderable 时,next()previous() 方法将寻找具有排序顺序的下一个/前一个模型。但是,您可能希望各种排序顺序由外键或其他谓词决定。(目前)最简单的方法是重写相关方法。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django-orderable-6.1.2.tar.gz (12.2 kB 查看哈希)

上传时间

构建分布

django_orderable-6.1.2-py2.py3-none-any.whl (16.6 kB 查看哈希)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面