如何访问模型字段的有序列表?因为 model_instance._meta.fields
返回没有 m2m 的字段,但在管理 View 中,字段顺序与它们在类中定义的完全相同。
(如管理站点上的编辑表单)?
最佳答案
尝试
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
关于Django模型字段顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158717/