gpt4 book ai didi

python - 如何根据他们的名字而不是他们的索引来排序选择?

转载 作者:太空狗 更新时间:2023-10-30 02:34:58 25 4
gpt4 key购买 nike

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

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

STATE=(  
(1, 'Full'),
(2, 'Damaged'),
(3, 'Partially damaged')
)

我试着重新排序列表:

STATE=(  
(2, 'Damaged'),
(1, 'Full'),
(3, 'Partially damaged')
)

但这似乎并没有什么不同(虽然我不是很熟悉 Python 缓存类和 View 的方式)。

像这样重新排序索引:

STATE=(  
(1, 'Damaged'),
(2, 'Full'),
(3, 'Partially damaged')
)

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

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

谢谢大家

最佳答案

将表单字段的 choices 属性更改为已排序的选项应该可以解决您的问题。

表单.py

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)

关于python - 如何根据他们的名字而不是他们的索引来排序选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5418042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com