我想访问一个我的模型字段verbose_name。
我可以通过像这样的字段来获得它
model._meta._fields()[2].verbose_name
但我需要动态地获取它。理想情况下会是这样的
model._meta._fields()['location_x'].verbose_name
我看了几件事,但我找不到它。
答案 0 :(得分:47)
对于Django< 1.10:
model._meta.get_field_by_name('location_x')[0].verbose_name
答案 1 :(得分:19)
model._meta.get_field('location_x').verbose_name
答案 2 :(得分:12)
所选答案提供的代理对象可能如下所示。
<django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}>
如果有人看到相同的内容,您可以在代理对象的 title()成员函数中找到详细名称的字符串。
model._meta.get_field_by_name(header)[0].verbose_name.title()
更好的方法是:
model._meta.get_field(header).verbose_name.title()
其中header
将是您感兴趣的字段的名称,即OPs上下文中的“location-x”。
注意:Django的开发人员也认为使用get_field
更好,因此在Django 1.10中折旧了get_field_by_name
。因此,无论你使用什么版本的Django,我都建议使用get_field
。
答案 3 :(得分:11)
答案 4 :(得分:7)
model._meta.get_field_by_name('location_x')[0].verbose_name
答案 5 :(得分:0)
如果要遍历所有字段,则需要获取field
:
for f in BotUser._meta.get_fields():
if hasattr(f, 'verbose_name'):
print(f.verbose_name)
答案 6 :(得分:0)
您也可以使用:
Model.location_x.field.verbose_name
模型是类名。我在我的动物模型上测试了这个:
Animal.sale_price.field.verbose_name
Animal.sale_price 返回一个 DeferredAttribute,它有几个元数据,比如verbose_name
注意:我使用的是 Django 3.1.5