переведенные поля перечисления в тегах шаблона

#django #enums #django-templates #templatetags

#django #перечисления #django-шаблоны #templatetags

Вопрос:

Я пытаюсь отобразить имя перечисления в шаблоне.Чтобы было понятно, у меня есть класс, подобный enum, в model.py

 class EmployerWorkerNumberRange():
R_0 = 0
R_1_5 = 1
R_6_15 = 2
UNKNOWN = 3

EMPLOYER_WORKER_NUMBER_RANGE =(
    (R_0,_("wnr_0")),
    (R_1_5 ,_("wnr_1_5")),
    (R_6_15,_("wnr_6_15")),
    (UNKNOWN,_("UnknownWorkerNumberRange")),
)
  

Когда я использую его в форме, подобной

wnr = forms.ChoiceField(label=_("emp_full_reg_wnr"), required=True, choices=EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE)

это отлично работает.(Заполняет выпадающий список переведенными значениями, и когда я получаю выбранный элемент, получается просто идентификатор)

Мой вопрос в том, как я могу показать любое переведенное значение в моем шаблоне, указав его идентификатор. Например, я хотел бы использовать это EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE[0]

Не могли бы вы предложить мне какой-либо способ?

Спасибо

Ответ №1:

Чтобы отобразить значение поля, доступное для чтения человеком, используйте get_$var_display() метод (созданный автоматически для всех полей с choices ) на экземпляре модели. Для вашего примера это что-то вроде этого:

 {{ company.get_wnr_display }}
  

Чтобы получить значение по индексу без экземпляра модели, самый простой способ — написать пользовательский фильтр, который преобразует индекс, хранящийся в переменной, в нужное значение:

 {{ some_value|as_wnr_title }}
  

Комментарии:

1. Это работает идеально, спасибо! Есть ли какой-нибудь документ, который я могу прочитать о таких вещах? Я прочитал документацию django, но я не заметил такого использования..

2. Это все в документации django, возможно, вы просматривали неправильные разделы. Этот конкретный метод находится здесь: docs.djangoproject.com/en/1.3/ref/models/instances