Python

Gegevens filteren in Django?

Gegevens filteren in Django?
Het is een veel voorkomende vereiste voor de webtoepassing om gegevens op de webpagina weer te geven op basis van de interesse van de gebruiker. De zoekfunctie van de applicatie maakt het gebruiksvriendelijker.  Het Django-framework heeft een ingebouwde filter() methode om gegevens uit de databasetabellen te filteren. Een tabel kan veel records bevatten en soms zijn bepaalde specifieke gegevens vereist op basis van de specifieke criteria. Deze taak wordt gemakkelijker door gebruik te maken van het filter() methode op verschillende manieren. Hoe de gegevens uit een databasetabel op vier verschillende manieren kunnen worden gefilterd met behulp van de filtermethode, wordt in deze zelfstudie besproken.

Vereisten

Voordat u de voorbeelden van deze zelfstudie oefent, moet u de volgende taken uitvoeren:

  1. Installeer de Django versie 3+ op Ubuntu 20+ (bij voorkeur)
  2. Een Django-project maken
  3. Voer de Django-server uit om te controleren of de server goed werkt of niet.

Een Django-app instellen

EEN. Voer de volgende opdracht uit om een ​​Django-app met de naam te maken filterapp.

$ python3 beheren.py startapp filterapp

B. Voer de volgende opdracht uit om de gebruiker te maken voor toegang tot de Django-database:. Als u de gebruiker eerder hebt gemaakt, hoeft u de opdracht niet uit te voeren.

$ python3 beheren.py createsuperuser

C. Voeg de app-naam toe aan de INSTALLED_APP deel van de py het dossier.

INSTALLED_APPS = [

'filterapp'
]

D. Maak een map met de naam Sjablonen binnen in de filterapp map en stel de Sjablonen locatie van de app in de SJABLONEN deel van de py het dossier.

SJABLONEN = [

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

Een model maken voor de databasetabel

Open de modellen.py bestand van de filterapp map en voeg het volgende script toe om de structuur van te definiëren medewerkers tafels. Werknemer class is gedefinieerd om een ​​tabel te maken met de naam medewerkers met naam, post, e-mail, afdeling, en toetredingsdatum velden. Hier, naam, bericht, en afdeling velden zullen karaktergegevens opslaan, de e-mail veld slaat het e-mailadres op en de toetredingsdatum veld zal datumgegevens opslaan.

modellen.py

# Importeer modellen module
van django.db-importmodellen
# Definieer klasse om een ​​werknemerstabel te maken
klasse Medewerker (modellen).Model):
naam = modellen.CharField(max_length=50)
post = modellen.CharField(max_length=40)
e-mail = modellen.E-mailveld()
afdeling = modellen.CharField(max_length=30)
toetredingsdatum = modellen.DatumVeld()

Voer de ... uit migraties opdracht om een ​​nieuwe migratie te maken op basis van de wijzigingen die door de modellen zijn aangebracht.

$ python3 beheren.py makemigraties filterapp

Voer de ... uit migreren commando om de SQL-commando's uit te voeren en alle tabellen in de database te maken die zijn gedefinieerd in de modellen.py het dossier.

$ python3 beheren.py migreren

Wijzig de inhoud van de beheerder.py bestand met de volgende inhoud:. Hier, de werknemer klasse van de modellen is geregistreerd met behulp van het register() methode om de . weer te geven gegevens van werknemers tabellen in het Django-beheerdashboard.

beheerder.py

# Beheermodule importeren
van django.bijdrage import beheerder
# Werknemersmodel importeren
van .modellen importeren Medewerker
# Registreer werknemersmodel
beheerder.website.inschrijven(Medewerker)

Voer de volgende URL uit om de Django-beheerdersaanmeldingspagina te openen. Geef de geldige gebruikersnaam en het wachtwoord op om de . te openen Django-beheerdashboard om toegang te krijgen tot de databasetabellen.

Voeg twee of meer werknemersrecords in om het filter op de gegevens toe te passen. Hier worden vijf records ingevoegd.

Maak de zoeken.html bestand in de filterapp/sjablonen/ map met het volgende script. De gegevens van de werknemer tabel wordt weergegeven in dit sjabloonbestand. voor lus wordt gebruikt om de inhoud van de . te lezen object_list variabele die wordt doorgegeven vanuit het weergavebestand. De naam, bericht, en afdeling waarden van de medewerkers tabel wordt weergegeven met behulp van de lijst.

zoeken.html

<br>Django-filterhandleiding<br>

Werknemerslijst



    % voor werkn in object_list %

  1. werkster.naam ( werkster.posten )


    werkster.afdeling afdeling



  2. % eindvoor %

Open de keer bekeken.py bestand van de filterapp map en wijzig de inhoud van het bestand met het volgende script:. Model- en sjabloonnamen worden gedefinieerd in het script.

keer bekeken.py

# Lijstweergave-module importeren
van django.keer bekeken.generieke import ListView
# Import medewerker module
van .modellen importeren Medewerker
# Q-module importeren
van django.db.modellen importeren Q
# Definieer klasse voor het filteren van gegevens
klasse SearchEmployee (ListView):
# Definieer model
model = werknemer
# Definieer sjabloon
template_name = 'zoeken'.html'

Wijzig de inhoud van de URL's.py bestand met de volgende inhoud:. In het script staat de 'zoekenEmp' pad is gedefinieerd om de . aan te roepen ZoekenMedewerker.as_view() methode die alle gegevens en de gefilterde gegevens van de medewerkers tabel naar het sjabloonbestand.

URL's.py

# Beheermodule importeren
van django.bijdrage import beheerder
# Pad importeren en module opnemen
van django.URL's importpad, include
# Importeer SearchEmployee-module
van filterapp.weergaven importeren ZoekenMedewerker
urlpatronen = [
# Definieer het pad voor admin
pad('admin/', beheerder.website.URL's),
# Definieer het pad voor zoeken
path('searchEmp/', SearchEmployee.as_view()),
]

De volgende uitvoer zal verschijnen zonder enige filtering voor de volgende URL:.

http://localhost:8000/SerachEmp

Gegevens filteren door eenvoudig te filteren

Voeg de volgende regel toe aan het einde van de keer bekeken.py bestand om de records van de . te filteren medewerkers tabel waar de waarde van de post veld is 'Accountant'.

# Pas basisfiltering toe
queryset = Werknemer.voorwerpen.filter(post ='Accountant')

De volgende uitvoer verschijnt na het toepassen van basisfiltering:.

Gegevens filteren met meerdere velden

Voeg de volgende regel toe aan het einde van de keer bekeken.py bestand om de records van de . te filteren medewerkers tabel waar de waarde van de afdeling veld is 'HT' en de e-mail veld is '[e-mail beveiligd]'.

# Pas filtering toe met meerdere velden
queryset = Werknemer.voorwerpen.filter(afdeling='HR', email='[email protected]')

De volgende uitvoer verschijnt na het toepassen van meerdere filters:.

Gegevens filteren met Q-object

Voeg de volgende regel toe aan het einde van de keer bekeken.py bestand om de records van de . te filteren medewerkers tabel waar de waarde van de post veld is 'Manager' of de waarde van de afdeling veld is 'verkoop'.

# Pas filtering toe met behulp van Q-objecten
queryset = Werknemer.voorwerpen.filter( Q(post='Manager') | Q(afdeling='Verkoop'))

De volgende uitvoer verschijnt na het toepassen van Q-objectfiltering:.

Gegevens filteren met behulp van filterketens

Voeg de volgende regel toe aan het einde van de keer bekeken.py bestand om de records van de . te filteren medewerkers tabel waar de waarde van de afdeling veld wordt eerst gecontroleerd en als het waar retourneert, wordt de waarde van de naam veld wordt gecontroleerd.

# Pas filtering toe door te ketenen
queryset = Werknemer.voorwerpen.filter(afdeling='HR').filter(name='Mehrab Hossain')

De volgende uitvoer verschijnt na het toepassen van filterketens:.

Conclusie

De gegevens kunnen op vele manieren in Django worden gefilterd op basis van de applicatievereisten. In deze zelfstudie werden vier verschillende manieren van filteren uitgelegd om de basisprincipes van Django-filtering te begrijpen. Dit zijn eenvoudig filteren, meervoudig filteren, filteren met Q-object en filterketens.

Sid Meier's Civilization VI downloaden en spelen op Linux and
Inleiding tot het spel Civilization 6 is een moderne versie van het klassieke concept dat werd geïntroduceerd in de serie Age of Empires-games. Het id...
Doom installeren en spelen op Linux
Inleiding tot Doom De Doom-serie is ontstaan ​​in de jaren 90 na de release van de originele Doom. Het was meteen een hit en vanaf die tijd heeft de g...
Vulkan voor Linux-gebruikers
Met elke nieuwe generatie grafische kaarten zien we game-ontwikkelaars de grenzen van grafische betrouwbaarheid verleggen en een stap dichter bij foto...