Django从Field对象获取字段的名称

Django get field's name from Field object

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

如果Field是对象名,但奇怪的是它在文档中的任何地方都没有提到,那么似乎field.name是有效的(我从一些这样的帖子中发现),所以想知道它是否仍然是最好的方法,还是我遗漏了一些明显的东西?


这似乎是获取模型字段名称的正确方法。当解释从旧API到新型号_metaAPI的迁移时,文档中也使用了field.name(见页面底部):

MyModel._meta.get_all_field_names() becomes:

1
2
3
4
5
6
7
8
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)
)))

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

另一方面,当你想要一个字段对象时,你可以通过它的名字得到它:

1
f = MyModel._meta.get_field(name)

因此,f.name将是字段的名称。