Hvordan filtrere data i Django?

Hvordan filtrere data i Django?
Det er et veldig vanlig krav for webapplikasjonen å vise data på websiden basert på brukerens interesse. Søkefunksjonen i applikasjonen gjør det mer brukervennlig. Django Framework har en innebygd filter() Metode for å filtrere data fra databasetabellene. En tabell kan inneholde mange poster, og noen ganger er det nødvendig å bestemme noen spesifikke data basert på de spesielle kriteriene. Denne oppgaven blir enklere ved å bruke filteret () Metode på forskjellige måter. Hvordan dataene fra en databasetabell kan filtreres ved hjelp av filtermetoden på fire forskjellige måter vil bli diskutert i denne opplæringen.

Forutsetninger

Før du øver på eksemplene på denne opplæringen, må du fullføre følgende oppgaver:

  1. Installer Django versjon 3+ på Ubuntu 20+ (helst)
  2. Lag et Django -prosjekt
  3. Kjør Django -serveren for å sjekke at serveren fungerer som den skal eller ikke.

Sett opp en Django -app

EN. Kjør følgende kommando for å opprette en Django -app som heter FilterApp.

$ Python3 Administrer.py startapp filterapp

B. Kjør følgende kommando for å opprette brukeren for tilgang til Django -databasen. Hvis du har opprettet brukeren før, trenger du ikke kjøre kommandoen.

$ Python3 Administrer.Py CreateSuperuser

C. Legg til appnavnet i Installert_app del av py fil.

Installert_apps = [
..
'FilterApp'
]

D. Opprett en mappe som heter Maler inne i FilterApp mappe og angi malens Plasseringen av appen i Maler del av py fil.

Maler = [

.. .
'Dirs': ['/home/fahmida/django_pro/filterapp/maler'],
.. .
,
]

Lag en modell for databasetabellen

Åpne modeller.py fil fra FilterApp mappe og legg til følgende skript for å definere strukturen til ansatte bord. Ansatt Klasse er definert for å lage en tabell som heter ansatte med Navn, innlegg, e -post, avdeling, og bli med_date Enger. Her, Navn, innlegg, og avdeling Felt vil lagre karakterdata, e -post Feltet vil lagre e -postadressen og bli med_date Feltet vil lagre datadata.

modeller.py

# Importer modeller modul
Fra Django.DB importmodeller
# Definer klasse for å lage ansatte -tabell
klasseansatt (modeller.Modell):
Navn = modeller.Charfield (Max_Length = 50)
POST = modeller.Charfield (Max_Length = 40)
E -post = modeller.E -postfield ()
Avdeling = modeller.Charfield (max_length = 30)
joining_date = modeller.Datefield ()

Kjør Makemigrasjoner Kommando for å lage en ny migrasjon basert på endringene som er gjort av modellene.

$ Python3 Administrer.py makemigrations filterapp

Kjør migrere Kommando for å utføre SQL -kommandoene og opprette alle tabeller i databasen som er definert i modeller.py fil.

$ Python3 Administrer.py migrerer

Endre innholdet i admin.py fil med følgende innhold. Her, den ansatte klasse av modellene er registrert ved hjelp av registeret () metode for å vise Registreringer av ansatte Tabeller i Django Administration Dashboard.

admin.py

# Importer administratormodul
Fra Django.bidra importadministrator
# Importer ansattes modell
fra .Modeller importerer ansatt
# Registrer ansattes modell
admin.nettstedet.Register (ansatt)

Kjør følgende URL for å åpne Django Admin -påloggingssiden. Oppgi gyldig brukernavn og passord for å åpne Django Administration Dashboard For å få tilgang til databasetabellene.

Sett inn to eller flere ansattes poster for å bruke filteret på dataene. Her settes fem poster.

Opprett Søk.html fil inne i filterapp/maler/ mappe med følgende skript. Dataene fra ansatt Tabellen vises i denne malfilen. til Loop brukes til å lese innholdet i objekt_list variabel som vil bli sendt fra visningsfilen. De Navn, innlegg, og avdeling verdier av ansatte Tabellen vises ved å bruke listen.

Søk.html

<br>Django Filter Tutorial<br>

Ansatteliste



    % for emp i objekt_list %

  1. emp.Navn (emp.post )


    emp.avdeling avdeling



  2. % endfor %

Åpne utsikt.py fil fra FilterApp mappe og endre innholdet i filen med følgende skript. Modell- og malnavn er definert i skriptet.

utsikt.py

# Import ListView -modulen
Fra Django.utsikt.Generisk import ListView
# Importer ansattes modul
fra .Modeller importerer ansatt
# Importer Q -modul
Fra Django.db.Modeller importerer q
# Definer klasse for filtreringsdata
Class SearchEmployee (ListView):
# Definer modell
modell = ansatt
# Definer mal
Template_name = 'Søk.html '

Endre innholdet i URLS.py fil med følgende innhold. I manuset, 'Searchemp'Sti er definert for å ringe SearchEmployee.as_view () metode som vil sende alle data og filtrerte data fra ansatte Tabell til malfilen.

URLS.py

# Importer administratormodul
Fra Django.bidra importadministrator
# Importer bane og inkluder modul
Fra Django.URLS importsti, inkluderer
# Import SearchEmployee Module
fra filterapp.Visninger importerer søkearbeid
urlpatterns = [
# Definer banen for admin
bane ('admin/', admin.nettstedet.URL),
# Definer banen for søk
Sti ('SearchEMP/', SearchEmployee.as_view ()),
]

Følgende utgang vises uten å bruke noe filtrering for følgende URL.

http: // localhost: 8000/serachemp

Filtredata ved enkel filtrering

Legg til følgende linje på slutten av utsikt.py fil for å filtrere postene til ansatte tabell der verdien av post felt er 'Regnskapsfører'.

# Bruk grunnleggende filtrering
QuerySet = Ansatt.objekter.filter (post = 'regnskapsfører')

Følgende utgang vises etter påføring av grunnleggende filtrering.

Filtredata med flere felt

Legg til følgende linje på slutten av utsikt.py fil for å filtrere postene til ansatte tabell der verdien av avdeling felt er 'Ht'Og eposten felt er '[email protected] '.

# Bruk filtrering med flere felt
QuerySet = Ansatt.objekter.filter (avdeling = 'hr', e -post = '[email protected] ')

Følgende utgang vises etter å ha påført flere filtrering.

Filtredata med Q -objekt

Legg til følgende linje på slutten av utsikt.py fil for å filtrere postene til ansatte tabell der verdien av post felt er 'sjef'Eller verdien av avdeling felt er 'Salg'.

# Bruk filtrering ved å bruke Q -objekter
QuerySet = Ansatt.objekter.filter (q (post = 'manager') | q (avdeling = 'salg'))

Følgende utgang vises etter påføring av q -objektfiltrering.

Filterdata ved å bruke filterkjeding

Legg til følgende linje på slutten av utsikt.py fil for å filtrere postene til ansatte tabell der verdien av avdeling feltet vil bli sjekket først, og hvis det kommer tilbake, så er verdien av Navn feltet vil bli sjekket.

# Bruk filtrering ved kjetting
QuerySet = Ansatt.objekter.Filter (avdeling = 'HR').filter (name = 'Mehrab Hossain')

Følgende utgang vises etter påføring av filterkjeding.

Konklusjon

Dataene kan filtreres i Django på mange måter basert på søknadskravene. Fire forskjellige måter å filtrere ble forklart i denne opplæringen for å forstå det grunnleggende om Django -filtrering. Dette er enkel filtrering, flere filtrering, filtrering med Q -objekt og filterkjeding.