モデル フィールドの順序付きリストにアクセスするにはどうすればよいですか? m2mなしでフィールドを返すためmodel_instance._meta.fields
ですが、管理者ビューでは、フィールドはクラスで定義されているのとまったく同じ順序で表示されます。(管理サイトの編集フォームのように) ?
質問する
1046 次
1 に答える
6
試す
sorted(model_instance._meta.fields + model_instance._meta.many_to_many,
key=lambda x:x.creation_counter)
M2M フィールドが通常のフィールドの後に定義されている場合fields + many_to_many
、それらの両方がすでに宣言順序に含まれているため、直接使用できます。
アップデート
operator.attrgetter()
の代わりにを使用する場合でもlambda
問題ありません。パフォーマンスの違いはわずかです。ただし、attrgetter
高速であるとは限りません。
In[1]: from django.contrib.auth.models import User
In[2]: fields = User._meta.fields + User._meta.many_to_many
In[3]: %timeit sorted(fields, key=lambda x:x.creation_counter)
100000 loops, best of 3: 6.47 us per loop
In[4]: from operator import attrgetter
In[5]: %timeit sorted(fields, key=attrgetter('creation_counter'))
100000 loops, best of 3: 9.17 us per loop
In[6]: ag=attrgetter('creation_counter')
In[7]: %timeit sorted(fields, key=ag)
100000 loops, best of 3: 8.68 us per loop
于 2012-06-22T15:10:47.713 に答える