我想访问一个我的模型字段verbose_name.
我可以通过像这样的现场指示得到它
model._meta._fields()[2].verbose_name
Run Code Online (Sandbox Code Playgroud)
但我需要动态地得到它.理想情况下,它会是这样的
model._meta._fields()['location_x'].verbose_name
Run Code Online (Sandbox Code Playgroud)
我看了几件事,但我找不到它.
Ign*_*ams 48
对于Django <1.10:
model._meta.get_field_by_name('location_x')[0].verbose_name
Run Code Online (Sandbox Code Playgroud)
tup*_*pan 13
对于Django 1.11和2.0:
MyModel._meta.get_field('my_field_name').verbose_name
Run Code Online (Sandbox Code Playgroud)
Django doc中的更多信息
nnb*_*nnb 12
所选答案提供了一个代理对象,可能如下所示.
<django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}>
Run Code Online (Sandbox Code Playgroud)
如果有人看到相同的内容,您可以在代理对象的title()成员函数中找到详细名称的字符串.
model._meta.get_field_by_name(header)[0].verbose_name.title()
Run Code Online (Sandbox Code Playgroud)
写这个的更好方法是:
model._meta.get_field(header).verbose_name.title()
Run Code Online (Sandbox Code Playgroud)
header您感兴趣的字段的名称将在哪里.即OPs上下文中的"location-x".
注意:Django的开发人员也觉得使用get_field更好,因此get_field_by_name在Django 1.10中有所折旧.因此,get_field无论您使用什么版本的Django,我都建议使用.
model._meta.get_field_by_name('location_x')[0].verbose_name
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
Model.location_x.field.verbose_name
Run Code Online (Sandbox Code Playgroud)
模型是类名。我在我的动物模型上测试了这个:
Animal.sale_price.field.verbose_name
Run Code Online (Sandbox Code Playgroud)
Animal.sale_price 返回一个 DeferredAttribute,它有几个元数据,例如 verbose_name
注意:我使用的是 Django 3.1.5
| 归档时间: |
|
| 查看次数: |
23357 次 |
| 最近记录: |