【发布时间】:2011-01-26 14:38:05
【问题描述】:
我想访问我的模型字段 verbose_name。
我可以通过这样的字段索引得到它
model._meta._fields()[2].verbose_name
但我需要动态获取它。理想情况下会是这样的
model._meta._fields()['location_x'].verbose_name
我看了一些东西,但就是找不到。
【问题讨论】:
我想访问我的模型字段 verbose_name。
我可以通过这样的字段索引得到它
model._meta._fields()[2].verbose_name
但我需要动态获取它。理想情况下会是这样的
model._meta._fields()['location_x'].verbose_name
我看了一些东西,但就是找不到。
【问题讨论】:
对于 Django
model._meta.get_field_by_name('location_x')[0].verbose_name
【讨论】:
'str' object has no attribute '_meta' 错误。 Django 1.7.
def verbose_name(value, arg): return value._meta.get_field_by_name(arg)[0].verbose_name,在模板中:{{ book|verbose_name:"title" }}
get_field_by_name 方法是 removed for Django 1.10,加上下面建议的使用 get_field 看起来不太像 hack...
model._meta.get_field('location_x').verbose_name
【讨论】:
【讨论】:
所选答案给出了一个可能如下所示的代理对象。
<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 将是您感兴趣的字段的名称。即 OP 上下文中的“location-x”。
注意:Django 的开发人员也觉得使用get_field 更好,因此在 Django 1.10 中已经贬低了get_field_by_name。因此,无论您使用什么版本的 Django,我都建议使用 get_field。
【讨论】:
model._meta.get_field_by_name('location_x')[0].verbose_name
【讨论】:
如果您想迭代所有需要获取 field 的字段:
for f in BotUser._meta.get_fields():
if hasattr(f, 'verbose_name'):
print(f.verbose_name)
【讨论】:
你也可以使用:
Model.location_x.field.verbose_name
Model 是类名。我在我的 Animal 模型上对此进行了测试:
Animal.sale_price.field.verbose_name
Animal.sale_price 返回一个 DeferredAttribute,它有几个元数据,比如 verbose_name
注意:我使用的是 Django 3.1.5
【讨论】:
# select fields for bulk_update : exclude primary key and relational
fieldsfields_to_update = []
for field_to_update in Model._meta.get_fields():
if not field_to_update.many_to_many and not field_to_update.many_to_one and not field_to_update.one_to_many and not field_to_update.one_to_one and not field_to_update.primary_key and not field_to_update.is_relation :
fields_to_update = fields_to_update + [field_to_update.name]
Model.objects.bulk_update(models_to_update , fields_to_update)
【讨论】: