我正在使用this django snippet,它会将数据从admin导出到csv文件。它有这两行从模型中获取字段名称。
opts = modeladmin.model._meta
field_names = set([field.name for field in opts.fields])
但是,这些字段名称不符合规定。有没有办法按照他们的模型中的声明顺序排序?如果没有,按字母顺序订购一套?
答案 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个项目集进行定期管理操作所带来的任何有益的性能提升,所以你可能会好好除去它们。