如何根据名称而不是索引来订购选择?

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)

以上是关于如何根据名称而不是索引来订购选择?的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 是不是通过自动索引来优化其数据库表?

根据字符串名称而不是列表视图项位置替换片段并启动活动

Java Dictionary 类存储键值

MySQL 是不是使用现有索引来创建新索引?

在C4D中用python实现一个根据索引来控制克隆的简易效果器

高效的 SQL 查询或索引来查找所有列是不是只有 1 个值