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

Anu*_*pam 2 django django-models django-views

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

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

dor*_*oru 6

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

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)
)))
Run Code Online (Sandbox Code Playgroud)

[f.name for f in MyModel._meta.get_fields()] 
Run Code Online (Sandbox Code Playgroud)

另外,它在逻辑上也是如此,因为另一方面,当你想要一个场对象时,你可以通过它的名字得到它:

f = MyModel._meta.get_field(name)
Run Code Online (Sandbox Code Playgroud)

f.name将是该领域的名称.