2010-03-11 45 views
25

我想訪問我的模型字段verbose_name。如何動態地訪問Django Model字段詳細名稱?

我可以現場獲得指數之像這樣

model._meta._fields()[2].verbose_name 

,但我需要動態地得到它。理想情況下,這將是這樣的

model._meta._fields()['location_x'].verbose_name 

我已經看了幾件事,但我無法找到它。

回答

45

Django的< 1.10:

model._meta.get_field_by_name('location_x')[0].verbose_name 
+0

MyModel._meta.get_field('my_field_name').verbose_name 

更多的信息,我得到' '海峽' 對象有沒有屬性「_meta''錯誤。 Django 1.7。 – 2014-11-13 07:33:53

+3

@MikhailBatcer:我不知道怎麼把這個分解給你,但是......字符串沒有字段。 – 2014-11-13 07:39:23

+0

嗯,它是在你的代碼段中傳遞的模型對象,而不是字符串,不是嗎? – 2014-11-13 07:44:31

7
model._meta.get_field_by_name('location_x')[0].verbose_name 
12

model._meta.get_field('location_x').verbose_name

12

選擇的答案給出了一個代理對象,它看起來如下。

<django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}> 

如果有人看到了同樣的,你可以找到在代理對象的標題()成員函數的詳細名稱的字符串。

​​

一種更好的方式來寫,這將是:

model._meta.get_field(header).verbose_name.title() 

其中header將是你感興趣的字段的名稱,即在OP的背景下「位置-X」。

注意:Django的開發商也覺得使用get_field較好,因此已經在Django 1.10貶值get_field_by_name。因此,無論您使用何種版本的Django,我都建議使用get_field

相關問題