@kgbplus

Как на форму передать локализованное verbose_name из модели?

Есть форма, на которой размещено такое поле:

year_first = forms.DateField(label=Clone._meta.get_field('year_first').verbose_name.capitalize(),
                                input_formats=['%y', '%Y', '%d.%m.%Y', '%d-%m-%Y'], required=False,
                                widget = YearTextInput)


т.е. это DateField в который можно ввести просто год и он конвертируется потом в какую то дату.
Не могу понять, почему label всегда берет из модели локализованное название?

В модели поле сделано так:
year_first = models.DateField(db_index=True, blank=True, null=True, verbose_name=_('year released'))


Так вот на форме всегда подпись к этому полю получается на русском языке, в то время как с остальными полями (которые создаются автоматически через class Meta) все нормально. Поля на шаблоне выводятся в цикле, все одинаково.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@kgbplus Автор вопроса
В общем, если кому то интересно, то это похоже оказался баг Django, описанный тут

Если коротко, то виноват метод capitalize(), он не поддерживается lazy объектами. Одно решение, описано на странице с багом, другое (похожее) я нашел сам:

В классе формы:
@lazy
def capit(string):
   return string.capitalize()

year_first = forms.DateField(label=capit(Clone._meta.get_field('year_first').verbose_name),
                            input_formats=['%y', '%Y', '%d.%m.%Y', '%d-%m-%Y'], required=False,
                            widget = YearTextInput)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы