对集合中的模型字段进行排序

时间:2012-01-31 01:10:00

标签: python django django-models django-admin

我正在使用this django snippet,它会将数据从admin导出到csv文件。它有这两行从模型中获取字段名称。

    opts = modeladmin.model._meta
    field_names = set([field.name for field in opts.fields])

但是,这些字段名称不符合规定。有没有办法按照他们的模型中的声明顺序排序?如果没有,按字母顺序订购一套?

1 个答案:

答案 0 :(得分:2)

简短回答:不会。套装会删除任何订购。

如果您想按字母顺序排序,请将其转换为列表并在其上调用sort()。

field_names = list(field_names)
field_names.sort()

您可以查看其他一些堆栈答案,以实现一个有序的集合,该集合将与其余代码(set & set)一起使用:

Does Python have an ordered set?


或者将使用集合的代码替换为使用列表的代码:

field_names = [field.name for field in opts.fields]
if fields:
    field_names = filter(lambda field: field in fields, field_names)
elif exclude:
    field_names = filter(lambda field: field not in exclude, field_names)   

我不明白为什么一个模型会有多个同名的字段,并且我没有看到使用一个集合为10个项目集进行定期管理操作所带来的任何有益的性能提升,所以你可能会好好除去它们。