Django从Field对象

时间:2017-05-10 15:15:38

标签: django django-models django-views

我试图找出从Field对象获取模型字段名称的推荐方法。

似乎field.name有效(我从某些SO帖子中发现)如果field是对象名称,但令人惊讶的是docs中没有提到它,所以想知道是否它仍然是最好的方式还是我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:6)

这似乎是获取模型字段名称的正确方法。在解释从旧API到新模型 field.name API的迁移时,docs中也会使用_meta(请参阅页面底部):< / p>

  

MyModel._meta.get_all_field_names()变为:

from itertools import chain
list(set(chain.from_iterable(
    (field.name, field.attname) if hasattr(field, 'attname') else (field.name,)
    for field in MyModel._meta.get_fields()
    # For complete backwards compatibility, you may want to exclude
    # GenericForeignKey from the results.
    if not (field.many_to_one and field.related_model is None)
)))

[f.name for f in MyModel._meta.get_fields()] 

另外,从某种意义上来说,这也是理所当然的,因为当你想要一个字段对象you can get it时,它的名字是:

f = MyModel._meta.get_field(name)

所以f.name将是该字段的名称。