Menu
CoddyTech

Создание формы

Часть раздела Формы путешествия по Django на Coddy. Урок 6 из 20.

Страница /events/new/ вручную записывает каждую подпись и поле ввода, а EventForm снова перечисляет те же поля. Форма может сгенерировать себя сама: передай её шаблону и напиши {{ form }} внутри тега <form>. Страница контактов:

<form method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Send</button>
</form>

{{ form }} выводит подпись и поле ввода для каждого поля в том порядке, в котором они объявлены в классе. Каждое поле ввода получает name поля и id вида id_email, поэтому его подпись указывает на него. Тег формы, токен и кнопку ты задаёшь сам.

Форма, в которую ещё ничего не ввели, — это класс, вызванный без данных: ContactForm(). Django также помечает обязательные поля ввода атрибутом required, поэтому браузер не отправит пустое поле. Теперь поле для даты — это обычное текстовое поле, потому что Django отображает DateField как текст. Вводи даты в формате 2031-12-05.

challenge icon

Задание

Легко

Пусть EventForm самостоятельно создаёт свои поля.

  1. В new_event передай в шаблон пустую форму EventForm под именем form.
  2. В new_event.html замени три метки и поля ввода на {{ form }}, который создаст их за тебя. Оставь тег формы, токен, кнопку и сообщение об ошибке.

Добавь событие с датой 2031-12-05: Django создал все метки, и ты переходишь на страницу события.

Попробуйте сами

{% extends "events/base.html" %}

{% block title %}Add an event{% endblock %}

{% block content %}
<h1>Add an event</h1>
{% if error %}
<p class="error">{{ error }}</p>
{% endif %}
<form method="post">
    {% csrf_token %}
    <label for="title">Title</label>
    <input id="title" name="title">
    <label for="date">Date</label>
    <input id="date" name="date" type="date">
    <label for="place">Place</label>
    <input id="place" name="place">
    <button type="submit">Add event</button>
</form>
{% endblock %}

Все уроки раздела Формы

Потренируйтесь самостоятельно: Песочница Django