簡體   English   中英

如何在Django管理員的change_list中更改模型的順序

[英]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
"

沒別的!

我已經嘗試過的

  1. 為我自己的QuerySet提供適當的順序。 不起作用,因為似乎無法在queryset中執行這種排序和分組
  2. 我試圖覆蓋change_list.html模板。 但是有一個自定義標簽“ list_results”,如果我刪除它,我將失去django admin的所有非常好的功能。

我確定我不是第一個需要訂購變更單的人。 我認為解決方案必須非常簡單。

您可以覆蓋鏈接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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM