Это очень распространенное требование к веб-приложению — отображать данные на веб-странице в зависимости от интересов пользователя. Функция поиска в приложении делает его более удобным для пользователя. Фреймворк Django имеет встроенный метод filter () для фильтрации данных из таблиц базы данных. Таблица может содержать много записей, и иногда требуется определение некоторых конкретных данных на основе определенных критериев. Эта задача становится проще, если использовать метод filter () по-разному. В этом руководстве будет обсуждаться, как данные из таблицы базы данных могут быть отфильтрованы с использованием метода фильтрации четырьмя различными способами.
Предпосылки
Перед тем, как практиковать примеры этого руководства, вы должны выполнить следующие задачи:
- Установите Django версии 3+ на Ubuntu 20+ (желательно)
- Создайте проект Django
- Запустите сервер 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 для доступа к таблицам базы данных.
Вставьте две или более записей о сотрудниках, чтобы применить фильтр к данным. Здесь вставлено пять записей.
Создайте файл 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 SearchEmployeeurlpatterns = [
# Define the path for admin
path(‘admin/’, admin.site.urls),
# Define the path for search
path(‘searchEmp/’, SearchEmployee.as_view()),
]
Следующий вывод будет отображаться без применения какой-либо фильтрации для следующего URL-адреса.
http: // локальный: 8000 / SerachEmp
Отфильтровать данные с помощью простой фильтрации
Добавьте следующую строку в конец файла 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-объекта.
Фильтрация данных с помощью цепочки фильтров
Добавьте следующую строку в конец файла views.py, чтобы отфильтровать записи таблицы сотрудников, где значение поля отдела будет проверяться первым, и если оно вернет истину, то будет проверено значение поля имени.
# Apply filtering by chaining
queryset = Employee.objects.filter(department=‘HR’).filter(name=‘Mehrab Hossain’)
Следующий вывод появится после применения цепочки фильтров.
Вывод
Данные можно фильтровать в Django разными способами в зависимости от требований приложения. В этом руководстве были объяснены четыре различных способа фильтрации, чтобы понять основы фильтрации Django. Это простая фильтрация, множественная фильтрация, фильтрация с помощью объекта Q и объединение фильтров.