Obiekty Q do złożonych filtrów
Łączenie warunków za pomocą AND, OR i NOT
Obiekty Q do złożonych filtrów to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.
Poza prostym filter()
Łączenie argumentów słów kluczowych w filter zawsze oznacza AND. Aby wyrazić OR lub NOT, potrzebują Państwo bardziej rozbudowanego narzędzia.
Poznaj obiekt Q
Obiekt Q opakowuje warunek, dzięki czemu można łączyć warunki za pomocą operatorów logicznych w ramach jednego zapytania.
from django.db.models import QOR za pomocą pionowej kreski
Proszę połączyć dwa obiekty Q operatorem pionowej kreski, aby utworzyć OR dopasowujące wiersze spełniające dowolny z warunków.
Book.objects.filter(Q(title__icontains="django") | Q(title__icontains="flask"))AND za pomocą ampersanda
Ampersand łączy obiekty Q operatorem AND. Przydaje się, gdy potrzebują Państwo jawnego grupowania zamiast zwykłego łączenia argumentów słów kluczowych.
Book.objects.filter(Q(price__lt=20) & Q(in_stock=True))Negacja za pomocą tyldy
Proszę umieścić tyldę przed obiektem Q, aby wyrazić NOT i dopasować każdy wiersz, który nie spełnia warunku.
Book.objects.filter(~Q(author__name="Anon"))Łączenie Q i argumentów słów kluczowych
Obiekty Q można przekazywać razem ze zwykłymi argumentami słów kluczowych, ale każdy pozycyjny obiekt Q musi wystąpić przed dowolnym argumentem słowa kluczowego.
Book.objects.filter(Q(price__lt=20) | Q(on_sale=True), in_stock=True)Grupowanie za pomocą nawiasów
Proszę umieszczać połączone obiekty Q w nawiasach, aby kontrolować kolejność działań, tak jak przy grupowaniu warunków w nieprzetworzonym SQL.
Book.objects.filter((Q(a=1) | Q(b=2)) & Q(c=3))Dynamiczne tworzenie filtrów
Ponieważ obiekty Q są wartościami, można budować je warunkowo w Pythonie przed przekazaniem wyniku do filter.
q = Q(active=True)
if term:
q &= Q(name__icontains=term)
User.objects.filter(q)Łączenie wielu elementów za pomocą reduce
Potrzebują Państwo OR dla listy terminów? Proszę połączyć je za pomocą operator.or_, aby utworzyć jeden obiekt Q.
from functools import reduce
import operator
reduce(operator.or_, [Q(tag=t) for t in tags])Nadal jedno zapytanie SQL
Niezależnie od złożoności logiki Django kompiluje drzewo Q do jednej klauzuli WHERE, więc nie powstaje dodatkowa komunikacja z bazą danych.
Kiedy używać Q
Proszę sięgać po Q, gdy filtr wymaga OR, NOT lub logiki budowanej w czasie działania programu; zwykłe argumenty słów kluczowych wystarczą przy prostych warunkach AND.
Szybkie sprawdzenie
Chcą Państwo znaleźć książki, których tytuł zawiera django LUB flask. Który filtr to wyraża?
Podsumowanie
Obiekty Q udostępniają logikę OR, AND i NOT, którą można grupować i budować dynamicznie, a następnie kompilować do jednego zapytania. 🧩
Często zadawane pytania
Czy lekcja „Obiekty Q do złożonych filtrów” jest bezpłatna?
Tak — pełny tekst „Obiekty Q do złożonych filtrów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obiekty Q do złożonych filtrów”?
Łączenie warunków za pomocą AND, OR i NOT Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Django Academy?
Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Obiekty Q do złożonych filtrów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?
Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- aggregate a annotate
- Wyrażenia F do atomowych aktualizacji
- Obiekty Q do złożonych filtrów
- Warunkowe agregowanie za pomocą Case/When