6

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

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 回答