![](/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.