我试图找出从Field
对象获取模型字段名称的推荐方法。
似乎field.name
有效(我从某些SO帖子中发现)如果field
是对象名称,但令人惊讶的是docs中没有提到它,所以想知道是否它仍然是最好的方式还是我错过了一些明显的东西?
答案 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
将是该字段的名称。