允许对django模型进行排序,并提供一个简单的管理界面来重新排序它们。
django-ordered-model-grappelli的Python项目详细描述
这是bfirsh的原始django有序模型的叉。下面的文字保持不变。
django有序模型允许对模型进行排序,并提供一个简单的管理 用于重新排序它们的接口。
基于https://djangosnippets.org/snippets/998/和 https://djangosnippets.org/snippets/259/
需要:
- Django >=1.5
安装
$ python setup.py install
用法
将Ordered_Model添加到您的设置中。已安装的_应用程序。
从ordered model继承模型以使其有序:
from django.db import models from ordered_model.models import OrderedModel
- class Item(OrderedModel):
name = models.CharField(max_length=100)
- class Meta(OrderedModel.Meta):
- pass
模型实例现在有一组方法来相对移动它们。
为了演示这些方法,我们创建了两个项的实例
###互换头寸 这将交换两个对象的位置。 ###在位置上向上移动位置 向上或向下移动一个物体只会使它与呼啸声交换位置
物体的正上方或正下方取决于方向。 ###移动到任意位置 将对象移动到堆栈中的任意位置。这基本上设置了
将值排序为指定的整数。对象介于原始对象和新对象之间
位置按方向增减顺序值
移动。 ###将对象移动到参考上方或下方 将对象直接移动到引用对象的上方或下方,增加或
减小两者之间所有对象的顺序值,具体取决于
移动方向。 ###移到堆栈顶部 这会将order值设置为堆栈中的最低值并增加
高于移动对象一的所有对象的顺序值。 ###移到堆栈底部 这会将order值设置为堆栈中的最高值并减少
低于移动对象1的所有对象的顺序值。 ##子集排序 在某些情况下,仅在对象的子集上需要对对象排序。例如,
在多对一/多关系中为用户管理联系人列表的应用程序,
希望允许每个用户订购其联系人,而不管其他用户如何订购
选择他们的顺序。通过order_with_aspect_to参数支持此选项。 一个简单的例子如下:
foo = Item.objects.create(name=”Foo”)
bar = Item.objects.create(name=”Bar”)
foo.swap(bar)
foo.up()
foo.down()
foo.to(12)
bar.to(13)
foo.above(bar)
foo.below(bar)
foo.top()
foo.bottom()
管理集成
若要在“管理更改列表”页中添加箭头以进行重新排序,可以使用 orderedmodeladmin和上移下移链接字段:
from django.contrib import admin from ordered_model.admin import OrderedModelAdmin from models import Item
- class ItemAdmin(OrderedModelAdmin):
- list_display = (‘name’, ‘move_up_down_links’)
admin.site.register(Item, ItemAdmin)
测试套件
需要Docker。
$ script/test