Django 1.4 SimpleListfilter 排序错误
Django 1.4 SimpleListfilter sorts wrong
我刚刚为我的 Django 应用程序实现了一个简单的列表过滤器,以仅捕获像这样的活动条目:
class ActiveAircraftsFilter(SimpleListFilter):
title = _('aircraft')
parameter_name = 'aircraft__ac_registration'
def lookups(self, request, model_admin):
qs = Aircraft.objects.filter(active=True)
act = set([ac.ac_registration for ac in qs])
return [(ac, ac) for ac in act]
def queryset(self, request, queryset):
return queryset
这按预期工作,但排序错误。
在我的开发环境中,我有三架飞机,其中两架处于活动状态。
但是在 DjangoAdmin 中,Dropdown 以错误的顺序包含它们。
我得到:
D-BBBB
D-AAAA
而不是预期的:D-AAAA 和 D-BBBB 作为第二。
有趣的是,它们也没有按 ID 排序...
我的基础模型飞机在 Meta class 集中有排序。
此外,我还尝试在获取查询集时设置顺序
qs = Aircraft.objects.filter(active=True).order_by('ac_registration')
但这也无济于事。
上面的代码有什么问题?
在Python中,set
是unordered。你可以试试
return [(ac, ac) for ac in sorted(act)]
我刚刚为我的 Django 应用程序实现了一个简单的列表过滤器,以仅捕获像这样的活动条目:
class ActiveAircraftsFilter(SimpleListFilter):
title = _('aircraft')
parameter_name = 'aircraft__ac_registration'
def lookups(self, request, model_admin):
qs = Aircraft.objects.filter(active=True)
act = set([ac.ac_registration for ac in qs])
return [(ac, ac) for ac in act]
def queryset(self, request, queryset):
return queryset
这按预期工作,但排序错误。
在我的开发环境中,我有三架飞机,其中两架处于活动状态。 但是在 DjangoAdmin 中,Dropdown 以错误的顺序包含它们。 我得到: D-BBBB D-AAAA
而不是预期的:D-AAAA 和 D-BBBB 作为第二。
有趣的是,它们也没有按 ID 排序...
我的基础模型飞机在 Meta class 集中有排序。 此外,我还尝试在获取查询集时设置顺序
qs = Aircraft.objects.filter(active=True).order_by('ac_registration')
但这也无济于事。
上面的代码有什么问题?
在Python中,set
是unordered。你可以试试
return [(ac, ac) for ac in sorted(act)]