如何访问模型字段的有序列表?因为model_instance._meta.fields
返回没有 m2m 的字段,但在管理员视图中,字段顺序与它们在类中定义的顺序完全相同。(如管理网站上的编辑表格)?
问问题
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 回答