Как написать гибкую фильтрацию на Python?

Для написания гибкой фильтрации на Python мы можем использовать фреймворк Django, который обеспечивает множество инструментов и функций для работы с базами данных и управления данными.

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

Для начала создадим модель, данных которой мы будем фильтровать. Например, пусть у нас будет модель "Product" с полями "name", "category" и "price".

from django.db import models

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

После создания модели мы можем выполнять фильтрацию на основе ее полей. Например, давайте выберем все товары с ценой больше 1000:

products = Product.objects.filter(price__gt=1000)

Здесь метод filter() принимает аргументы в виде имен полей модели и операторов сравнения, например gt (greater than), lt (less than), gte (greater than or equal to), lte (less than or equal to) и другие.

Также мы можем использовать оператор "или" (|) и оператор "и" (&) для составления более сложных фильтров:

products = Product.objects.filter(category='furniture', price__lt=2000)

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

products = Product.objects.filter(category__in=['furniture', 'electronics'])

Здесь используется оператор __in, который позволяет указать несколько значений, в которые должно попадать поле модели.

Кроме того, Django также позволяет использовать операторы для выполнения строкового поиска (contains, icontains), проверки наличия значений (isnull), фильтрации по датам (date, year, month, day), а также дополнительные функции (annotate, order_by, distinct) для более сложной фильтрации.

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