我刚刚为Django应用实现了一个简单的listfilter,以仅捕获活动条目,如下所示:

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


这可以按预期工作,但排序错误。

在我的开发环境中,我有3架飞机,其中2架处于活动状态。
但是在DjangoAdmin中,下拉列表包含错误的顺序。
我得到:
BBBB
D-AAAA

出乎意料的是:D-AAAA和D-BBBB位居第二。

有趣的是,它们也没有按ID排序...

我的基础模型飞机在Meta类集中具有排序。
此外,我还尝试在获取queryset时设置顺序

qs = Aircraft.objects.filter(active=True).order_by('ac_registration')


但这也无济于事。

上面的代码有什么问题?

最佳答案

在Python中,setunordered。你可以试试

return [(ac, ac) for ac in sorted(act)]

10-04 20:48