Django模型字段顺序

标签 django django-models

如何访问模型字段的有序列表?因为 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/

相关文章:

python - Django 休息 PageNumber 分页

Django JSONField - 获取源文本

python - django:自动检测数据库上所做的 CRUD 更改

python - 使用用户定义的主键 Django 更新数据库中的元素

python - Django 模型在保存方法中管理 UNIQUE 约束错误

python - 基于类的 View VS 基于函数的 View

django - 如何在 Django 中使用子查询?

python - Django 查询集 : All Model1 objects where a Model2 exists with a model1 AND the given user

最大分组的 Django TruncDay 限制

python - Django模型更新或创建具有唯一约束的对象