Формы в Django

Формы Django удобны тем, что мы можем создать новую форму с нуля (1) или воспользоватьсяModelForm(2) для сохранения содержимого формы в модель.
Продолжая наш пример с книгами, давайте создадим простое представление, которое позволит пользователям производить поиск по нашей базе книг по их названию.

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

(1)

Первый шаг несложен. Давайте создадим представление, которое отображает поисковую форму:

Соответствующий шаблон, templates/search_form.htmlможет выглядеть так:

Схема URL в mainapp/urls.pyможет выглядеть так:

Если вы запустите runserver и посетите http://127.0.0.1:8000/search-form/ , вы увидите поисковый интерфейс. Очень простой.


Попробуйте отправить форму, несмотря на то, что вы получите ошибку 404. Форма указывает на URL /search/, обработчик которого ещё не был реализован.

Давайте это исправим с помощью второй функции представления (mainapp/views.py):

Вкратце, мы проверяем, что «q» существует в request.GET, а также, что request.GET ['q'] является не пустым значением перед передачей его в запрос.

Мы используем Book.objects.filter (name__contains = q), чтобы запросить нашу таблицу книг для всех книг, название которых включает данную заявку.
Результаты поиска отображаем в шаблоне searchresults.html
Также существует фильтр "
**\_icontains" , который включает данные без учета чувствительности к регистру**_

Давайте создадим шаблон для результатов поиска search_results.html:

{% extends 'base.html' %}
{% load staticfiles %}

{% block content %}

<p>You searched for: <strong> {{ query }} </strong> </p>
{% if books %}
    <p>Found {{ books|length }} book{{ books|pluralize }}.</p>
    <ul>
        {% for book in books %}
        <li >{{ book.name }}</li>
        {% endfor %}
    </ul>
{% else %}
    <p>No books</p>
{% endif %}

{% endblock %}

где books | length- показывает количество найденный книг;
abooks | pluralize- добавляет в конец 's' если количество книг больше 1 ого

Осталось добавить url для нашей второй вьюшки в mainapp/urls.py

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

Так мы научились :

  • писать формы с нуля;
  • запрашивать данные с помощью метода GET;
  • отображать результаты с помощью тегов;
  • познакомились с некоторыми фильтрами.

results matching ""

    No results matching ""