如何根据名称而不是索引来订购选择?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据名称而不是索引来订购选择?相关的知识,希望对你有一定的参考价值。
这是我关于stackoverflow的第一篇文章,我将尝试遵循基本规则,但要对我温和。
我必须对django应用程序进行一些更改(乍一看似乎很肤浅)。客户端希望网站管理部分中表单的所有下拉菜单按字母顺序排序。问题是其中一些选择基于models.py文件中定义的静态列表,如下所示:
STATE=(
(1, 'Full'),
(2, 'Damaged'),
(3, 'Partially damaged')
)
我尝试重新排序列表:
STATE=(
(2, 'Damaged'),
(1, 'Full'),
(3, 'Partially damaged')
)
但它似乎没有什么区别(虽然我并不熟悉Python缓存类和视图的方式)。
像这样重新排序索引:
STATE=(
(1, 'Damaged'),
(2, 'Full'),
(3, 'Partially damaged')
)
但是这意味着编写一些庞大而复杂的SQL脚本来保持旧数据的一致性(因为大多数列表都比这个列表长,并且排列会变得更复杂)。
所以我的问题是:有没有办法根据名称而不是索引对这些选择进行排序?也许在models.IntegerField(..., choices=STATE)
的定义?
谢谢你们。
答案
稍微简洁的表示法:
sorted_state = sorted(STATE, key=lambda x: x[1])
另一答案
将表单字段的choices属性更改为已排序的选项应该可以解决您的问题。
forms.朋友
class YourAdminForm(forms.Form):
def __init__(self, *args, **kwargs):
super(YourAdminForm, self).__init__(*args, **kwargs)
sorted_choices = sorted(YourModel.STATE, key=lambda x: x[1])
self.fields['field'].choices = sorted_choices
和:
from django.contrib import admin
from models import Your
from forms import YourAdminForm
class YourAdmin(admin.ModelAdmin):
form = YourAdminForm
admin.site.register(Your, YourAdmin)
以上是关于如何根据名称而不是索引来订购选择?的主要内容,如果未能解决你的问题,请参考以下文章