2010-03-11 1 views
25

Я хотел бы иметь доступ к одному полю моей модели verbose_name.Как можно динамически получить доступ к подробному имени модели Django Model?

я могу получить его в поле Indice как этот

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

, но мне нужно, чтобы получить его динамически. В идеале это было бы что-то вроде этого

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

Я просмотрел несколько вещей, но я просто не могу его найти.

ответ

45

Для Джанго < 1.10:

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

Я получаю ' 'ул' объект не имеет атрибута«_meta'' ошибка. Джанго 1.7. –

+3

@MikhailBatcer: Я не знаю, как сломать это вам, но ... строки не имеют полей. –

+0

Ну, это объект модели, который передается в вашем фрагменте, а не строка, не так ли? –

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_by_name(header)[0].verbose_name.title() 

Лучший способ написать это будет:.

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

header где будет название интересующего вас поля в то «место-х» в OPS контексте.

ПРИМЕЧАНИЕ: Разработчики Django также считают, что использование get_field лучше и, таким образом, обесценились get_field_by_name в Django 1.10. Поэтому я бы предложил использовать get_field независимо от того, какую версию Django вы используете.

0

Для Джанго 1.11 и 2.0:

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

Более подробную информацию в Django doc