Django模型字段顺序

And*_*kov 6 django django-models

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

okm*_*okm 6

尝试

sorted(model_instance._meta.fields + model_instance._meta.many_to_many,
       key=lambda x:x.creation_counter)
Run Code Online (Sandbox Code Playgroud)

如果在正常字段之后定义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
Run Code Online (Sandbox Code Playgroud)