Как сделать форму фильтрации в Django?

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

Для создания формы фильтрации в Django, вы должны выполнить следующие шаги:

Шаг 1: Создание модели
Вам нужно создать модель, на основе которой будет фильтроваться информация. Например, допустим, у вас есть модель "Product", и вы хотите фильтровать продукты по категории и цене. Вот пример такой модели:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=10, decimal_places=2)

Шаг 2: Создание формы
Вам нужно создать форму, где пользователь сможет указать параметры фильтрации. Для этого вы можете использовать Django формы. Вот пример формы фильтрации для модели "Product":

from django import forms

class ProductFilterForm(forms.Form):
    category = forms.CharField(required=False)
    price_min = forms.DecimalField(required=False)
    price_max = forms.DecimalField(required=False)

В данном примере форма имеет три поля: "category", "price_min" и "price_max". Все эти поля являются необязательными.

Шаг 3: Создание представления (view)
Вам нужно создать представление, где будет обрабатываться форма фильтрации и выбираться данные в соответствии с указанными параметрами. Вот пример представления для фильтрации продуктов по категории и цене:

from django.shortcuts import render
from .forms import ProductFilterForm
from .models import Product

def product_filter(request):
    form = ProductFilterForm(request.GET)
    products = Product.objects.all()

    if form.is_valid():
        category = form.cleaned_data['category']
        price_min = form.cleaned_data['price_min']
        price_max = form.cleaned_data['price_max']

        if category:
            products = products.filter(category=category)
        if price_min:
            products = products.filter(price__gte=price_min)
        if price_max:
            products = products.filter(price__lte=price_max)

    context = {
        'form': form,
        'products': products
    }
    return render(request, 'product_filter.html', context)

В данном примере, мы получаем данные формы фильтрации из запроса пользователя и проверяем их на валидность. Если данные формы являются валидными, мы фильтруем записи из модели "Product" в соответствии с указанными параметрами.

Шаг 4: Создание шаблона
Вам нужно создать шаблон, который будет отображать форму фильтрации и результаты фильтрации. Вот пример шаблона "product_filter.html":

<form method="get" action="{% url 'product_filter' %}">
    {{ form.as_p }}
    <input type="submit" value="Filter">
</form>

{% for product in products %}
    {{ product.name }} - {{ product.price }}<br>
{% endfor %}

В данном примере, мы отображаем форму фильтрации с использованием метода "get" и указываем действие на представление "product_filter". Затем мы отображаем результаты фильтрации, выводя имя и цену продукта.

Шаг 5: Настройка URL
Вам нужно настроить URL маршрут для представления "product_filter". Вот пример настройки URL в файле "urls.py":

from django.urls import path
from .views import product_filter

urlpatterns = [
    path('products/filter/', product_filter, name='product_filter'),
]

Теперь, при обращении к URL "/products/filter/", будет отображаться форма фильтрации и результаты фильтрации продуктов.

Надеюсь, эта подробная инструкция помогла вам создать форму фильтрации в Django.