这是我关于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)
?
谢谢大家。
答案 0 :(得分:3)
稍微简洁的表示法:
sorted_state = sorted(STATE, key=lambda x: x[1])
答案 1 :(得分:3)
将表单字段的choices属性更改为已排序的选项应该可以解决您的问题。
forms.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)