如何根据名称而不是索引对选项进行排序?

paz*_*tek 5 python django django-admin

这是我在 stackoverflow 上发表的第一篇文章,我将尝试遵循基本规则,但对我要温和。

我必须对 django 应用程序进行一些更改(乍一看似乎很肤浅)。客户希望网站管理部分中的所有表单下拉菜单按字母顺序排序。问题是其中一些选择是基于 models.py 文件中定义的静态列表,如下所示:

STATE=(  
    (1, 'Full'),  
    (2, 'Damaged'),  
    (3, 'Partially damaged')  
)  
Run Code Online (Sandbox Code Playgroud)

我尝试像这样重新排序列表:

STATE=(  
    (2, 'Damaged'),  
    (1, 'Full'),  
    (3, 'Partially damaged')  
)  
Run Code Online (Sandbox Code Playgroud)

但这似乎没有什么区别(尽管我不太熟悉Python缓存类和视图的方式)。

像这样重新排序索引:

STATE=(  
    (1, 'Damaged'),  
    (2, 'Full'),  
    (3, 'Partially damaged')  
)  
Run Code Online (Sandbox Code Playgroud)

可行,但意味着需要编写一些巨大且复杂的 SQL 脚本来保持旧数据的一致性(因为大多数列表都比这个列表长,并且排列会变得更加复杂)。

所以我的问题是:有没有办法根据这些选项的名称而不是索引对这些选项进行排序?也许在 的定义中models.IntegerField(..., choices=STATE)

谢谢你们。

小智 4

稍微简洁一点的表示法:

sorted_state = sorted(STATE, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)