Python

Как да филтрирам данни в Django?

Как да филтрирам данни в Django?
Много често се изисква уеб приложението да показва данни на уеб страницата въз основа на интереса на потребителя. Функцията за търсене на приложението го прави по-лесен за ползване.  Django framework има вградена филтър () метод за филтриране на данни от таблиците на базата данни. Таблица може да съдържа много записи и понякога се изискват определени конкретни данни въз основа на конкретните критерии. Тази задача става по-лесна чрез използване филтърът () метод по различни начини. Как данните от таблицата на базата данни могат да бъдат филтрирани с помощта на метода на филтъра по четири различни начина ще бъдат разгледани в този урок.

Предпоставки

Преди да практикувате примерите от този урок, трябва да изпълните следните задачи:

  1. Инсталирайте Django версия 3+ на Ubuntu 20+ (за предпочитане)
  2. Създайте проект на Django
  3. Стартирайте сървъра Django, за да проверите дали сървърът работи правилно или не.

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

A. Изпълнете следната команда, за да създадете приложение на Django с име filterapp.

$ python3 управлява.py startapp filterapp

Б. Изпълнете следната команда, за да създадете потребителя за достъп до базата данни на Django. Ако сте създали потребителя преди това, не е необходимо да изпълнявате командата.

$ python3 управлява.py създаваuperuser

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

INSTALLED_APPS = [
..
„филтерап“
]

д. Създайте папка с име шаблони вътре в filterapp папка и задайте шаблони местоположението на приложението в ШАБЛОНИ част от py файл.

ШАБЛОНИ = [

.. .
'DIRS': ['/ home / fahmida / django_pro / filterapp / templates'],
.. .
,
]

Създайте модел за таблицата на базата данни

Отвори модели.py файл от filterapp папка и добавете следния скрипт, за да определите структурата на служители таблици. Служител клас е дефиниран за създаване на таблица с име служители с име, поща, имейл, отдел, и дата на присъединяване полета. Тук, име, пост, и отдел полета ще съхранява данни за символи, електронна поща полето ще съхранява имейл адреса и дата на присъединяване полето ще съхранява данни за дата.

модели.py

# Модул за импортиране на модели
от django.db модели за импортиране
# Определете класа за създаване на таблица на служителите
клас Служител (модели.Модел):
име = модели.CharField (max_length = 50)
пост = модели.CharField (max_length = 40)
имейл = модели.EmailField ()
отдел = модели.CharField (max_length = 30)
joinning_date = модели.DateField ()

Стартирайте макемиграции команда за създаване на нова миграция въз основа на промените, направени от моделите.

$ python3 управлява.py makemigrations filterapp

Стартирайте мигрират команда за изпълнение на SQL команди и създаване на всички таблици в базата данни, които са дефинирани в модели.py файл.

$ python3 управлява.py мигрират

Променете съдържанието на администратор.py файл със следното съдържание. Тук, работникът клас на моделите е регистриран с помощта регистъра () метод за показване на записи на служителите таблици в таблото за управление на Django.

администратор.py

# Импортиране на администраторски модул
от django.принос вноса администратор
# Импортиране на модел на служител
от .модели внос Служител
# Регистрирайте модел на служител
администратор.сайт.регистър (служител)

Изпълнете следния URL, за да отворите страницата за вход на администратора на Django. Предоставете валидно потребителско име и парола, за да отворите Табло за управление на Django за достъп до таблиците на базата данни.

Поставете два или повече записа на служителите, за да приложите филтъра към данните. Тук се вмъкват пет записа.

Създайте Търсене.html файл в filterapp / шаблони / папка със следния скрипт. Данните от служител таблицата ще се покаже в този файл с шаблон. за цикъл се използва за четене на съдържанието на списък с обекти променлива, която ще бъде предадена от файла на изгледа. The име, пост, и отдел стойности на служители таблицата ще се покаже чрез използване на списъка.

Търсене.html

<br>Урок за филтриране на Django<br>

Списък на служителите



    % за emp в списък с обекти%

  1. изп.име (изп.публикуване)


    emp.отдел отдел



  2. % endfor%

Отвори мнения.py файл от filterapp папка и модифицирайте съдържанието на файла със следния скрипт. Имената на модели и шаблони са дефинирани в скрипта.

мнения.py

# Импортиране на модул ListView
от django.мнения.родово импортиране ListView
# Импортиране на модул на служител
от .модели внос Служител
# Импортиране на Q модул
от django.db.модели импортиране Q
# Определете клас за филтриране на данни
клас SearchEfficiee (ListView):
# Определете модел
модел = Служител
# Определете шаблон
template_name = 'търсене.html '

Променете съдържанието на URL адреси.py файл със следното съдържание. В сценария,searchEmp'пътят е дефиниран за извикване на ТърсенеEeeeeeee.as_view () метод, който ще изпрати всички данни и филтрираните данни на служители таблица към файла на шаблона.

URL адреси.py

# Импортиране на администраторски модул
от django.принос вноса администратор
# Импортиране на път и включване на модул
от django.URL адреси за импортиране, включете
# Импортиране на модул SearchEfficiee
от filterapp.изгледи импортиране
urlpatterns = [
# Определете пътя за администратор
път ('admin /', admin.сайт.URL адреси),
# Определете пътя за търсене
path ('searchEmp /', SearchEfficiee.as_view ()),
]

Следният изход ще се появи, без да се прилага филтриране за следния URL адрес.

http: // localhost: 8000 / SerachEmp

Филтриране на данни чрез просто филтриране

Добавете следния ред в края на мнения.py файл за филтриране на записите на служители таблица, където стойността на пост полето е "касиер счетоводител'.

# Прилагане на основно филтриране
queryset = Служител.обекти.филтър (пост = 'Счетоводител')

Следният изход ще се появи след прилагане на основно филтриране.

Филтриране на данни с множество полета

Добавете следния ред в края на мнения.py файл за филтриране на записите на служители таблица, където стойността на отдел полето еHT' и имейлът полето е „[имейл защитен]“.

# Прилагане на филтриране с множество полета
queryset = Служител.обекти.филтър (отдел = 'HR', имейл = '[имейл защитен]')

Следното извеждане ще се появи след прилагане на множество филтри.

Филтриране на данни с Q обект

Добавете следния ред в края на мнения.py файл за филтриране на записите на служители таблица, където стойността на пост полето еМениджърили стойността на отдел полето еПродажби'.

# Прилагане на филтриране с помощта на Q обекти
queryset = Служител.обекти.филтър (Q (пост = 'Мениджър') | Q (отдел = 'Продажби'))

Следното извеждане ще се появи след прилагане на Q обектно филтриране.

Филтрирайте данните чрез използване на верижно филтриране

Добавете следния ред в края на мнения.py файл за филтриране на записите на служители таблица, където стойността на отдел полето ще бъде проверено първо и ако връща true, тогава стойността на име полето ще бъде проверено.

# Прилагане на филтриране чрез вериги
queryset = Служител.обекти.филтър (отдел = 'HR').филтър (name = 'Mehrab Hossain')

Следното извеждане ще се появи след прилагане на веригата на филтъра.

Заключение

Данните могат да бъдат филтрирани в Django по много начини въз основа на изискванията на приложението. В този урок бяха обяснени четири различни начина на филтриране, за да се разберат основите на филтрирането на Django. Това са просто филтриране, многократно филтриране, филтриране с Q обект и верижно филтриране.

Контролирайте и управлявайте движението на мишката между множество монитори в Windows 10
Двоен дисплей на мишката ви позволява да контролирате и конфигурирате движението на мишката между множество монитори, като забавя движенията му близо ...
WinMouse ви позволява да персонализирате и подобрите движението на показалеца на мишката на компютър с Windows
Ако искате да подобрите функциите по подразбиране на показалеца на мишката, използвайте безплатна програма WinMouse. Той добавя още функции, за да ви ...
Бутонът на левия бутон на мишката не работи в Windows 10
Ако използвате специална мишка с вашия лаптоп или настолен компютър, но бутонът на левия бутон на мишката не работи на Windows 10/8/7 по някаква причи...