Подтвердить что ты не робот

Как можно динамически получить доступ к подробному имени модели Django Model?

Я хотел бы иметь доступ к одному полю моей модели verbose_name.

Я могу получить его по индексу поля, подобному этому

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

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

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

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

4b9b3361

Ответ 1

Для Django < 1,10:

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

Ответ 2

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

Ответ 3

Выбранный ответ дает прокси-объект, который может выглядеть как ниже.

<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 будет именем интересующего вас поля, т.е. "location-x" в контексте OPs.

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

Ответ 4

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

Ответ 5

Для Django 1.11 и 2.0:

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

Дополнительная информация в Django doc