我有一個模型(節點),它是在管理員中按日期排序的,因此最先顯示最新的節點。這可以。Django管理員選擇不同於默認模型訂購的訂購
相同的模型(節點)被另一個模型(設備)引用。編輯設備時,會有一個節點列表(在HTML選擇中),它也是按日期排序的。 我希望這個選擇按名稱排序,而不是按日期排序。
是否可以有兩種不同的排序方法,一種用於對象列表,另一種用於選擇框?
謝謝。
我有一個模型(節點),它是在管理員中按日期排序的,因此最先顯示最新的節點。這可以。Django管理員選擇不同於默認模型訂購的訂購
相同的模型(節點)被另一個模型(設備)引用。編輯設備時,會有一個節點列表(在HTML選擇中),它也是按日期排序的。 我希望這個選擇按名稱排序,而不是按日期排序。
是否可以有兩種不同的排序方法,一種用於對象列表,另一種用於選擇框?
謝謝。
最簡單的事情將是覆蓋在ModelAdmin
的formfield_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
。
你有沒有嘗試過這樣的:
class Node
name = ...
date = ...
fields ....
class Meta:
order_with_respect_to='Device'
ordering = ('Device', 'name')
我不知道這個選項,+1教我新的東西,但我不認爲它解決了我的問題 – nemesisdesign 2012-01-19 16:06:35
該解決方案仍然需要類似於接受回答中提到的內容,以便在管理面板中獲得
您可以創建自定義DeviceAdmin形式和設置查詢集的「節點」字段參數。
# in models.py we have Device model with Node field
class Device(models.Model):
node = models.ForeignKey(Node)
...
# in admin.py we have DeviceAdmin with custom form
class DeviceAdminForm(forms.ModelForm):
node = forms.ModelChoiceField(queryset=Node.objects.order_by('name'), label='Node')
class Meta:
model = Device
class DeviceAdmin(admin.ModelAdmin):
form = DeviceAdminForm
這是我的首選方法。 – 2012-01-18 23:21:46
感謝,它的工作原理,你可以在這裏看到:https://github.com/ninuxorg/nodeshot/issues/65 – nemesisdesign 2012-01-19 17:01:14