6

モデル フィールドの順序付きリストにアクセスするにはどうすればよいですか? m2mなしでフィールドを返すためmodel_instance._meta.fieldsですが、管理者ビューでは、フィールドはクラスで定義されているのとまったく同じ順序で表示されます。(管理サイトの編集フォームのように) ?

4

1 に答える 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 に答える