通过抽象基类和管理类将手动排序顺序添加到Django对象中。
项目描述
Django Orderable
通过抽象基类和管理类将手动排序顺序添加到Django对象中。项目包括
- 抽象基类模型
- 管理类
- 内联管理类
- 管理模板
演示
安装
从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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3dacd778d65cddbe4afa221d5c8b141cdccbdcb1ca6e90549e0e11df5f6f5dd3 |
|
MD5 | adc401b8be52061b9cf7022d8e1ad1db |
|
BLAKE2b-256 | 08966b12528fc96938a27504c4b1d4907be0aa1fbefbd7034c7436f765f0350c |
关闭
django_orderable-6.1.2-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0de9b8d554ef05ad7f964a66b5d424b2610ca796bf4e2b939f9993a432256772 |
|
MD5 | ddc092e9126b4db4a85af3852124d42d |
|
BLAKE2b-256 | 80d8f0f4919e0bffd1a6eeb5a1202ea94538b61b6715189cfaa33c30b3e281b6 |