2012-01-18 89 views
8

我有一個模型(節點),它是在管理員中按日期排序的,因此最先顯示最新的節點。這可以。Django管理員選擇不同於默認模型訂購的訂購

相同的模型(節點)被另一個模型(設備)引用。編輯設備時,會有一個節點列表(在HTML選擇中),它也是按日期排序的。 我希望這個選擇按名稱排序,而不是按日期排序。

是否可以有兩種不同的排序方法,一種用於對象列表,另一種用於選擇框?

謝謝。

回答

6

最簡單的事情將是覆蓋在ModelAdminformfield_for_foreignkey方法Device,像

def formfield_for_foreignkey(self, db_field, request, **kwargs): 
    if db_field.name == 'node': 
     kwargs['queryset'] = Node.objects.order_by('name') 
    return super(DeviceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

(我在這裏承擔了相當數量。我希望這是明確的!)

同樣有formfield_for_manytomany

+0

這是我的首選方法。 – 2012-01-18 23:21:46

+1

感謝,它的工作原理,你可以在這裏看到:https://github.com/ninuxorg/nodeshot/issues/65 – nemesisdesign 2012-01-19 17:01:14

2

你有沒有嘗試過這樣的:

class Node 
     name = ... 
     date = ... 
     fields .... 

     class Meta: 
      order_with_respect_to='Device' 
      ordering = ('Device', 'name') 
+0

我不知道這個選項,+1教我新的東西,但我不認爲它解決了我的問題 – nemesisdesign 2012-01-19 16:06:35

+0

該解決方案仍然需要類似於接受回答中提到的內容,以便在管理面板中獲得