2012-01-31 85 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個項目集中使用一組設置所帶來的任何有價值的性能收益,所以您可能會以及刪除它們。