![](/img/trans.png)
[英]Django - Admin - How to override change_list template for Model Proxy?
[英]How to change the order of model in change_list in django admin
我真的坚持了一个非常简单的任务(乍看之下很简单)。 我需要在管理员中重新排列更改列表。 我有类别,一些类别是嵌套的,因此它们具有与同一张表相关的“ parent_id”外键。
因此,我唯一需要做的就是以适当的顺序列出所有类别。
代替:
"Category1
subcategory_of_category3
Category2
subcategory_of_category_4
"
我需要:
"Category1
---subcategory_of_category1
Category2
----subcategory_of_category2
"
没别的!
我已经尝试过的
我确定我不是第一个需要订购变更单的人。 我认为解决方案必须非常简单。
您可以覆盖链接Django Snippet
Django
排序在database level.
除非您将uni_code
函数的结果存储在数据库中,否则django
将无法本地返回以这种方式排序的结果。
在数据库中存储订购值可能是解决此问题的最便捷方法
我按照Mushahid Khan的建议,通过在数据库中添加订单字段来解决该问题。 由于我需要该站点的实际管理员不必手动指定每个类别的顺序,因此我不得不在模型中重写save()方法。
也许这是非常la脚和丑陋的选择,但对我的项目来说效果很好。 我决定,假定顺序是嵌套的,站点的所有者将要指定每个类别的顺序。 这意味着,例如,我们有“ Category-1”和“ SubCategory-1-1”,“ SubCategory-1-2”等。 如果我们指定“ SubCategory-1-1”的顺序-这将影响父类别中的顺序(即“ Category-1”)。
我决定使用字母顺序,因为在我看来,计算和修改要简单得多。 这是我的save()方法的源代码
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if self.category_parent_id is not None:
self._level = '2'
if len(self.category_parent._order[0:-1])<2:
self._order = '%s%s%s%s' % ('a', self.category_parent._order[0:-1], self.category_order, self._level)
else:
self._order = '%s%s%s' % (self.category_parent._order, self.category_order, self._level)
else:
self._level = '1'
self._order = '%s%s%s%s'%('a', self.category_order, self._level, str(self.id))
for child in self.children.all():
child._level = '2'
if len(self._order[0:-1])<2:
child._order = '%s%s%s%s'%('a', self._order[0:-1], child.category_order, child._level)
else:
child._order = '%s%s%s'%(self._order, child.category_order, child._level)
super(Category, child).save()
super(Category, self).save()
我认为,需要对其进行优化,但是目前它仍然有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.