0Pricing
Django Academy · Lekcja

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 Q

OR 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

  1. aggregate a annotate
  2. Wyrażenia F do atomowych aktualizacji
  3. Obiekty Q do złożonych filtrów
  4. Warunkowe agregowanie za pomocą Case/When
← Powrót do Django Academy