2012-01-31 7 views
1

私はthis django snippetを使用しています。これは、adminからデータをcsvファイルにエクスポートします。これは、モデルからフィールド名を取得するこれらの2つの行を持っています。セット内のモデルフィールドをソート

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

ただし、これらのフィールド名は順不同です。彼らのモデルの宣言の順序でソートする方法はありますか?そうでない場合は、アルファベット順にセットを注文しますか?

答えて

2

短い答え:いいえ。セットで注文が削除されます。

アルファベット順に並べ替える場合は、リストに変換してsort()を呼び出します。

Does Python have an ordered set?


field_names = list(field_names) 
field_names.sort() 

あなたは、コードの残りの部分(set & 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個のアイテムセットに1セットを使用することでパフォーマンスが向上することはありません。よく取り除いてください。

関連する問題