![]() |
Григорий Жижилкин
13 марта 2010 |
|
![]() |
Задача. | Сделать удобную форму стандартными инструментами. |
![]() |
![]() |
![]() |
Для удобства пользователей мы часто делаем сложные по структуре формы, а стандартные классы на это могут быть не рассчитаны.
Например, мы хотим сделать HTML-форму из нескольких полей и дополнить ее повторяющимся набором полей.
Хозяйке на заметку |
В Джанго формой называется набор полей, представляющий данные одного объекта. HTML-форма может строиться из нескольких форм Джанго. |
Повторяющиеся поля реализуются при помощи модуля formsets. Обычно нужно описать основную форму и расширенную форму, а затем вывести их в шаблоне по отдельности. Но, допустим, нам хочется вывести повторяющиеся поля между простыми полями формы. Сложность в том, что форма в Джанго стандартными методами выводится последовательно и непрерывно.
Чтобы поместить повторяющиеся поля внутри простой формы, достаточно разбить форму на поля в шаблоне, но это противоречит принципу DRY: придется продублировать код, выводящий сообщения об ошибках, названия полей и текстовые подсказки.
Создадим поле и виджет, которые будут выводить вложенную форму:
|
|
В том месте, где форма должна содержать вложенную форму, ставим поле класса FieldsetField:
|
|
В шаблоне ничего не изменилось:
|
|
Способы размножения полей будут описаны в следующей статье.
© 19952023 Студия Артемия Лебедева
|