Чтобы получить больше контроля над моими полями ввода, я пытаюсь «скопировать» функцию, которая генерирует поля ввода в шаблоне.

Я использую ModelForm и хочу изменить

...
{{ form.name }}
...

В нечто вроде

...
<input id="{{ form.name.auto_id }}" type="text" name="{{ form.name.name }}" maxlength="{{ form.name.**get_max_length** }}" value="{{ form.name.**get_value_or_initial_value** }}"/>
...

Большая часть этого уже работает, кроме maxlength и value .

максимальная длина
Я читаю

Но я все еще не понимаю ...

значение
Ответ на этот вопрос (Как вы можете вручную отобразить поле формы с установленным начальным значением?) указывает на заявку, которая уже исправлена. Тем не менее name.value напечатает "None", если значение отсутствует. Я должен ловить value="None" вручную или пока есть лучшее решение?

[редактировать]
значение, кажется, работает так

{{ form.name.value|default_if_none:"" }}

(из Показать значение поля формы django в шаблоне ?)

0
speendo 24 Авг 2014 в 15:38

1 ответ

Лучший ответ

Вы можете получить атрибут max_length из виджета. Для начального значения вам нужно только получить доступ к атрибуту value, уже есть начальное или отправленное значение. Все начальные значения, переданные в класс формы, хранятся в form.initial, но вам, вероятно, не нужно проверять эти значения :.

<input id="{{ form.name.auto_id }}" type="text" name="{{ form.name.name }}" maxlength="{{ form.name.field.widget.attrs.max_length }}" value="{% if form.name.value %}{{ form.name.value }}{% endif %}"/>
2
Bruce 24 Авг 2014 в 22:53
Благодарность! value, похоже, работает (я также нашел ярлык - см. Правку в моем вопросе), однако я не могу заставить max_length работать таким образом. ты пробовал?
 – 
speendo
24 Авг 2014 в 16:27
1
Извините, я забыл атрибут поля, теперь он исправлен. BoundField не имеет прямого доступа к виджету.
 – 
Bruce
24 Авг 2014 в 22:56