Python: Разработка на фреймворке Django
2026-02-26 20:18 Diff

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

При этом остается важный вопрос — права на изменение. Изменять что-то на сайте может только автор — кто создал сущность. Механизм, который отвечает за выдачу и проверку прав, называется авторизацией. В Django авторизация встроена. Она не рассматривается в курсе, но про нее можно прочитать самостоятельно в документации.

Форма

Для реализации обновления сущности, нам нужно добавить новые маршрут и обработчик маршрута:

Маршрут

Важно добавить этот маршрут до маршрута articles/<int:id>/. Иначе последний перехватит обращение к articles/<int:id>/edit/, так как он соответствует шаблону.

Обработчик

В данном обработчике мы получаем номер редактируемой статьи. Получаем информацию о записи из базы данных по её id. Для заполнения формы данными из модели мы применяем дополнительный аргумент instance класса формы, в который передаем нашу модель с данными.

Шаблон

Шаблон редактирования практически один в один повторяет шаблон создания. Разными у них бывают только отдельные элементы, например, текст кнопки отправки формы. Для таких случаев можно использовать инструкцию include. Она позволяет извлекать общие куски шаблонов в отдельные шаблоны и включать их там где нужно.

Основных изменений здесь два:

  • Другое имя кнопки
  • Адрес формы указывает на конкретную статью

Обработчик формы

Обработчик, который обновляет сущность, практически идентичен созданию сущности. Только мы работаем с существующей статьей, поэтому ее нужно извлечь из базы данных. Остальное всё то же самое: сохранение и редирект на список статей.