Django模型字段顺序

时间:2012-06-22 14:54:45

标签: django django-models

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

1 个答案:

答案 0 :(得分: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