2017-05-10 57 views
1

我正在試圖找出從Field對象獲取模型字段的名稱的建議方法。Django從Field對象中獲取字段的名稱

看來field.name作品(這是我從一些SO帖子發現)如果field是對象名稱,但令人驚訝的不是在docs提及任何地方,所以想知道,如果它仍然是最好的辦法還是我失去了一些東西很明顯?

回答

2

看來這是獲取模型字段名稱的正確方法。 field.name也在docs使用(請參閱在頁面的底部)解釋的新模式,從舊的API遷移時_meta API:

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將是字段的名稱。

+0

謝謝 - 是的,我也看到它,但想知道爲什麼它不在主要的字段選項參考。也許只是一個文檔錯誤。 – Anupam

+0

@Anupam看來這是得名的方法。請參閱[這個舊的答案](http://stackoverflow.com/a/3106314/1418794)。 – doru

+1

@Anupam是的,我認爲是缺乏文檔 – doru