django скрыть поле формы

Изменение поля формы django на скрытое поле

у меня есть форма django с RegexField (что очень похоже на обычное поле ввода текста). На мой взгляд, при определенных условиях я хочу скрыть это от пользователя, и пытается сохранить форму как можно более похожими.

что лучший / самый django-y / наименее хакерский способ сделать это поле поле?

5 ответов

Если у вас есть пользовательский шаблон и посмотреть можно исключить поле и использовать << modelform.instance.field >> чтобы получить значение.

также можно использовать в вид:

но я не уверен, что он защитит метод сохранения на post.

надеюсь, что это помогает.

это также может быть полезно: << form.field.as_hidden >>

во-первых, если вы не хотите, чтобы пользователь изменял данные, то кажется более чистым просто исключить поле. Включение его в качестве скрытого поля просто добавляет больше данных для отправки по проводу и приглашает вредоносного пользователя изменить его, когда вы этого не хотите. Если у вас есть веская причина включить поле, но скрыть его, вы можете передать ключевое слово arg конструктору modelform. Что-то вроде этого, возможно:

тогда, на ваш взгляд:

Я предпочитаю этот подход к изменению внутренних элементов модели в представлении, но это вопрос вкуса.

параметр, который работал для меня, определяет поле в исходной форме как:

затем, когда вы переопределите его в новом классе, он сохранит его место.

для нормальной формы вы можете сделать

если у вас есть форма модели, вы можете сделать следующее

вы также можете переопределить __init__ метод

Источник

Измените поле формы Django на скрытое поле

Я знаю, что могу установить атрибуты на поле с помощью:

И я могу установить желаемое начальное значение с помощью:

Однако это не изменит форму виджета.

6 ответов

Если у вас есть пользовательский шаблон и представление, вы можете исключить поле и использовать << modelform.instance.field >> для получения значения.

Также вы можете предпочесть использовать в представлении:

Но я не уверен, что это защитит метод сохранения на посту.

Надеюсь, это поможет.

Вариант, который работал для меня, определить поле в исходной форме как:

Затем, когда вы переопределите его в новом классе, он сохранит свое место.

Вы можете просто использовать css:

Это сделает поле и его метку невидимыми.

Это также может быть полезно: << form.field.as_hidden >>

Для нормальной формы вы можете сделать

Если у вас есть модель формы, вы можете сделать следующее

Вы также можете переопределить метод __init__

Во-первых, если вы не хотите, чтобы пользователь изменял данные, тогда кажется более понятным просто исключить поле. Включение его в качестве скрытого поля просто добавляет больше данных для отправки по проводам и предлагает злоумышленнику изменить его, когда вы этого не хотите. Если у вас есть веская причина включить поле, но скрыть его, вы можете передать ключевое слово arg в конструктор модели формы. Возможно, что-то вроде этого:

Тогда, на ваш взгляд:

Я предпочитаю такой подход к модификации внутренних элементов модели в представлении, но это вопрос вкуса.

Источник

Документация Django 1.7

Этот документ знакомит со способами работы с формами. Для более детальной информации по API форм обращайтесь к API форм, Поля формы и Проверка форм и полей формы.

Если вы планируете создавать сайты и приложения, который принимают и сохраняют данные от пользователей, вам необходимо использовать формы.

Django предоставляет широкий набор инструментов для этого.

HTML формы¶

Кроме элементов форма должна содержать еще две вещи:

куда: URL, на который будут отправлены данные

как: HTTP метод, который должна использовать форма для отправки данных

Например, форма авторизации Django содержит несколько элементов: один с type=»text» для логина пользователя, один с type=»password» для пароля, и один с type=»submit» для кнопки “Log in”. Она также содержит несколько скрытых текстовых полей, которые Django использует для определения что делать после авторизации.

Форма также говорит браузеру, что данные должны оправляться на URL, указанный в атрибуте action тега

При отправке формы будет отправлен POST запрос с данными из формы.

Также необходимо добавить представление, которое обрабатывает запрос на /your-name/ URL.

Это очень простая форма. На практике форма может состоять из дюжин или сотен полей, множество из которых необходимо заполнить начальным значением, и мы должны позволить пользователю отправить форму несколько раз прежде чем обработать окончательный результат.

Вам может понадобится валидация на стороне браузера, или более сложные конролы, например, позволить пользователю выбрать дату из календаря.

На много легче позволить Django сделать эту работу за нас.

Создание форм в Django¶

Класс Form ¶

Мы уже знаем какую форму хотим получить в HTML. Для начала нам понадобится следующий класс формы:

После рендеринга наша форма будет выглядеть следующим образом:

Обратите внимание, она не содержит тег

Все поля формы и их атрибуты будут добавлены в HTML из << form >> при рендеринге шаблона.

Формы и CSRF защита

HTML5 поля и проверка в браузере

Введите слова для поиска или имя модуля, класса или функции.

Источник

Работа с формами¶

Если вы не планируете создавать веб-сайты и приложения, которые будут только публиковать содержимое и не будут принимать данные от посетителей, вам необходимо понимать и использовать формы.

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

HTML-формы¶

В качестве примера, форма входа для администратора Django содержит несколько элементов : один из type=»text» для имени пользователя, один из type=»password» для пароля и один из type=»submit» для кнопки «Войти». Он также содержит некоторые скрытые текстовые поля, которые пользователь не видит, и которые Django использует для определения того, что делать дальше.

Он также сообщает браузеру, что данные формы должны быть отправлены на URL, указанный в атрибуте

Вам понадобится представление, которое отображает шаблон, содержащий HTML-форму, и которое может предоставлять поле current_name по мере необходимости.

Это очень простая форма. На практике форма может содержать десятки или сотни полей, многие из которых должны быть предварительно заполнены, и мы можем ожидать, что пользователь пройдет цикл редактирования-отправки несколько раз, прежде чем завершит операцию.

Мы можем потребовать некоторой проверки в браузере, даже до отправки формы; мы можем захотеть использовать гораздо более сложные поля, которые позволят пользователю делать такие вещи, как выбор даты из календаря и так далее.

На данном этапе гораздо проще заставить Django сделать большую часть этой работы за нас.

Источник

Django. Как скрыть ненужные поля в форме в зависимости от выбранной категории?

Все привет. Мне нужно сделать так, чтобы при добавлении нового объявления, выбирая категорию, скрывались ненужные поля в форме. Понимаю, что это делается чере JS, но я пока плохо разбираюсь, поэтому прошу подсказать, если кто хорошо разбирается.
Например, я хочу, чтобы при выборе «Дома и участки» исчезал «Этаж»:
5cc6b7c5a1850755852236
Вот моя главная модель:

Посмотрел в браузере структуру формы в шаблоне:

Структура поля, которое я хочу скрыть:

Попробовал сделать так, но пока не работает:

Если знаете, подскажите, пожалуйста, или пример какой, как это делается. Заранее, спасибо.

Простой 1 комментарий

b58add29d8aabf1d8d2182234007e821

Как-то очень давно делал подобное, но для формы адреса. Брал идею с PayPal
https://www.ushanka.com/ вот на этом сайте, добавите товар в корзину и перейдете в саму корзину, далее «Pay with card». Но на этом сайте было критично только для USA, поэтому на все страны у меня настроена default форма, а USA специфичная.
Делается подобное через GET запрос к view которая на вход принимает параметр category (желательно строковый параметр slug), далее во view происходит import нужной Form из forms.py вашего приложения, в случае отсутствия специфичного класса под категорию, через исключение импортируете DefaultCategoryForm, таким же образом подтягиваете шаблон, можно использовать select_template(). Далее этот кусочек формы рендерите и вставляете в ваш HTML.
Но также нужно учесть что при валидации вам нужно подставлять нужную форму. Собрать ее лучше на лету через type().

В другом проекте более простом, я использовал betterforms. Там нужно создавать группы форм, а на атрибут class вешать например slug тех категорий полей которые нужно отображать для конкретной категории. Но этот вариант подойдет для не обязательных полей. То есть везде его использовать не получится

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • django своя форма регистрации
  • django разработка веб приложений на python уэсли чан джефф форсье книга