更改订单ModelChoiceField

时间:2012-10-11 21:04:16

标签: python django django-queryset choicefield

如何从模型手动更改选项字段中的顺序?

例如:

此代码:

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'

任何想法?

2 个答案:

答案 0 :(得分:1)

添加另一个描述所需顺序的字段,并按顺序排序。

答案 1 :(得分: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()方法或信号。

相关问题