2012-10-11 146 views
1

如何在模型的選擇字段中手動更改訂單?更改訂單ModelChoiceField

例如:

此代碼:

ModelChoiceField(queryset=SomeModel.objects.order_by('SomeField')) 

給我:

'a_somevalue' 
'b_somevalue' 
'c_somevalue' 
'd_somevalue' 

此代碼:

ModelChoiceField(queryset=SomeModel.objects.order_by('-SomeField')) 

給我:

'd_somevalue' 
'c_somevalue' 
'b_somevalue' 
'a_somevalue' 

,但如何做到這一點:

'c_somevalue' 
'a_somevalue' 
'd_somevalue' 
'b_somevalue' 

什麼想法?

回答

1

添加另一個描述所需排序的字段,然後按順序排列。

+0

是的,我知道...我想過這個,但這不是解決這個問題,它只是跳過它。 – jkgh

+0

你想要一個任意的順序。這是你如何實現一個任意的順序。 –

1

您可以使用extra

q = Entry.objects.extra(select={'my_sort_field': 
           "some think like ___ 
            FIND_IN_SET(left(somefield,1),'c,a,d,b') "}) 
q = q.extra(order_by = ['my_sort_field']) 

但是,如果是這樣我的模型,我將創建用於排序操作一個全新的領域,我會保持它覆蓋save()方法或通過信號。