python / intermediate
Snippet
Django CBV ListView mit gefiltertem QuerySet
ListViews sind leistungsstarke klassenbasierte Views in Django, die automatisch eine Liste von Objekten rendern. Dieses Beispiel zeigt, wie man get_queryset() überschreibt, um Artikel nach Status und Suchanfrage zu filtern, und mehrere Q-Objekte für flexible Suchfunktionen kombiniert.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.views.generic import ListViewfrom django.db.models import Qfrom .models import Articleclass PublishedArticlesView(ListView):model = Articletemplate_name = 'articles/list.html'context_object_name = 'articles'def get_queryset(self):query = self.request.GET.get('q', '')return Article.objects.filter(status='published').filter(Q(title__icontains=query) | Q(content__icontains=query)).order_by('-published_at')
django
Erklärung
1
from django.views.generic import ListView
Importiere die ListView generische View-Klasse aus Djangos klassenbasierten Views-Modul
2
from django.db.models import Q
Importiere Q-Objekte für den Aufbau komplexer Datenbankabfragen mit ODER-Bedingungen
3
def get_queryset(self):
Überschreibe diese Methode, um anzupassen, welche Objekte aus der Datenbank abgerufen werden
4
Q(title__icontains=query) | Q(content__icontains=query)
Erstelle einen schreibungsunabhängigen Suchfilter über Titel UND Inhaltsfelder mit Q-Objekt ODER-Operator