Фильтрация данных в Django

Django Программирование и разработка

Django

Это очень распространенное требование к веб-приложению — отображать данные на веб-странице в зависимости от интересов пользователя. Функция поиска в приложении делает его более удобным для пользователя. Фреймворк Django имеет встроенный метод filter () для фильтрации данных из таблиц базы данных. Таблица может содержать много записей, и иногда требуется определение некоторых конкретных данных на основе определенных критериев. Эта задача становится проще, если использовать метод filter () по-разному. В этом руководстве будет обсуждаться, как данные из таблицы базы данных могут быть отфильтрованы с использованием метода фильтрации четырьмя различными способами.

Предпосылки

Перед тем, как практиковать примеры этого руководства, вы должны выполнить следующие задачи:

  1. Установите Django версии 3+ на Ubuntu 20+ (желательно)
  2. Создайте проект Django
  3. Запустите сервер Django, чтобы проверить, работает ли сервер правильно или нет.

Настройте приложение Django

1. Выполните следующую команду, чтобы создать приложение Django с именем filterapp.

$ python3 manage.py startapp filterapp

2. Выполните следующую команду, чтобы создать пользователя для доступа к базе данных Django. Если вы уже создали пользователя раньше, запускать команду не нужно.

$ python3 manage.py createsuperuser

3. Добавьте имя приложения в часть INSTALLED_APPфайла py.

INSTALLED_APPS = [
…..
‘filterapp’
]

4. Создайте папку с именем templatesвнутри папки filterappи задайте расположение шаблона приложения в части TEMPLATES файла py.

TEMPLATES = [
{
….
‘DIRS’: [‘/home/fahmida/django_pro/filterapp/templates’],
….
},
]

Создайте модель для таблицы базы данных

Откройте файл models.py из папки filterapp и добавьте следующий скрипт для определения структуры таблиц сотрудников. Класс сотрудников определяется для создания таблицы с именами сотрудников с полями name, post, email, Department и joining_date. Здесь в полях имени, должности и отдела будут храниться символьные данные, в поле электронной почты будет храниться адрес электронной почты, а в поле joining_date будут храниться данные о дате.

models.py

# Import models module
from django.db import models

# Define class to create employees table
class Employee(models.Model):
name = models.CharField(max_length=50)
post = models.CharField(max_length=40)
email = models.EmailField()
department = models.CharField(max_length=30)
joinning_date = models.DateField()

Запустите команду makemigrations, чтобы создать новую миграцию на основе изменений, внесенных моделями.

$ python3 manage.py makemigrations filterapp

Запустите команду migrate, чтобы выполнить команды SQL и создать все таблицы в базе данных, которые определены в файле models.py.

$ python3 manage.py migrate

Измените содержимое файла admin.py следующим образом. Здесь класс моделей Employee регистрируется с помощью метода register () для отображения записей таблиц сотрудников на панели администрирования Django.

admin.py

# Import admin module
from django.contrib import admin
# Import Employee model
from .models import Employee

# Register employee model
admin.site.register(Employee)

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

Запустите следующий URL-адрес, чтобы открыть страницу входа администратора Django

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

Вставьте две или более записей о сотрудниках, чтобы применить фильтр к данным

Создайте файл search.html в папке filterapp / templates / с помощью следующего скрипта. В этом файле шаблона будут отображаться данные из таблицы сотрудников. Цикл for используется для чтения содержимого переменной object_list, которая будет передана из файла представления. Значения имени, должности и отдела в таблице сотрудников будут отображаться с использованием списка.

search.html

< title >
Учебное пособие по фильтрам Django
< / title >

< h1 style = «margin-left: 20px» > Список сотрудников < / h1 >

< ol >
{% для emp в object_list%}
< li >
< p style = «font-size : 20px » > < b > {{emp.name}} < / b > ({{emp.post}}) < / p >

{{emp.department}} отдел < / p >
< / li >
{% endfor%}
< / ol >

Откройте файл views.py из папки filterapp и измените содержимое файла с помощью следующего скрипта. Имена модели и шаблона определены в скрипте.

views.py

# Import ListView module
from django.views.generic import ListView
# Import Employee module
from .models import Employee
# Import Q module
from django.db.models import Q

# Define class for filtering data
class SearchEmployee(ListView):
# Define model
model = Employee
# Define template
template_name = ‘search.html’

template_name = ’search.html’

Измените содержимое файла urls.py следующим образом. В сценарии путь searchEmp определен для вызова метода SearchEmployee.as_view (), который отправит все данные и отфильтрованные данные таблицы сотрудников в файл шаблона.

urls.py

# Import admin module
from django.contrib import admin
# Import path and include module
from django.urls import path, include
# Import SearchEmployee module
from filterapp.views import SearchEmployee

urlpatterns = [
# Define the path for admin
path(‘admin/’, admin.site.urls),
# Define the path for search
path(‘searchEmp/’, SearchEmployee.as_view()),
]

Следующий вывод будет отображаться без применения какой-либо фильтрации для следующего URL-адреса.

http: // локальный: 8000 / SerachEmp

Следующий вывод будет отображаться без применения какой-либо фильтрации для следующего URL-адреса

Отфильтровать данные с помощью простой фильтрации

Добавьте следующую строку в конец файла views.py, чтобы отфильтровать записи таблицы сотрудников, в которой значение поля сообщения — » Бухгалтер «.

# Apply basic filtering
queryset = Employee.objects.filter(post =‘Accountant’)

Следующий результат появится после применения базовой фильтрации.

Следующий результат появится после применения базовой фильтрации

Фильтрация данных с несколькими полями

Добавьте следующую строку в конец файла views.py, чтобы отфильтровать записи в таблице сотрудников, где значение поля отдела — » HT «, а поле электронной почты — » ali@gmail.com «.

# Apply filtering with multiple fields
queryset = Employee.objects.filter(department=‘HR’, email=‘ali@gmail.com’)

Следующий результат появится после применения множественной фильтрации.

Следующий результат появится после применения множественной фильтрации

Фильтрация данных с помощью объекта Q

Добавьте следующую строку в конец файла views.py, чтобы отфильтровать записи таблицы сотрудников, где значение поля сообщения — » Менеджер » или значение поля отдела — » Продажи «.

# Apply filtering by using Q objects
queryset = Employee.objects.filter( Q(post=‘Manager’) | Q(department=‘Sales’))

Следующий вывод появится после применения фильтрации Q-объекта.

Следующий вывод появится после применения фильтрации Q-объекта

Фильтрация данных с помощью цепочки фильтров

Добавьте следующую строку в конец файла views.py, чтобы отфильтровать записи таблицы сотрудников, где значение поля отдела будет проверяться первым, и если оно вернет истину, то будет проверено значение поля имени.

# Apply filtering by chaining
queryset = Employee.objects.filter(department=‘HR’).filter(name=‘Mehrab Hossain’)

Следующий вывод появится после применения цепочки фильтров.

Следующий вывод появится после применения цепочки фильтров

Вывод

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

Читайте также:  Язык сценариев: что это такое
Оцените статью
bestprogrammer.ru
Добавить комментарий