2012-01-31 73 views
1

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

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

但是,这些字段名称是不正确的。有没有办法在他们的模型中按照他们的声明顺序进行排序?如果不是,按字母顺序排列一个集合?

回答

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个项目集中使用一组设置所带来的任何有价值的性能收益,所以您可能会以及删除它们。