Objek Q untuk Filter Kompleks
Gabungkan kondisi dengan AND, OR, dan NOT
Objek Q untuk Filter Kompleks adalah pelajaran Django Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Django Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Django Academy mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Beyond Simple filter()
Stacking keyword arguments in filter always means AND. To express OR or NOT, you need a richer tool.
Meet the Q Object
A Q object wraps a condition so you can combine conditions with boolean operators inside a single query.
from django.db.models import QOR with the Pipe
Combine two Q objects with the pipe operator to build an OR, matching rows that satisfy either condition.
Book.objects.filter(Q(title__icontains="django") | Q(title__icontains="flask"))AND with the Ampersand
The ampersand joins Q objects with AND, useful when you want explicit grouping rather than plain keyword stacking.
Book.objects.filter(Q(price__lt=20) & Q(in_stock=True))Negate with the Tilde
Put a tilde in front of a Q object to express NOT, matching every row that fails the condition.
Book.objects.filter(~Q(author__name="Anon"))Mixing Q and Keywords
You may pass Q objects and plain keyword arguments together, but every positional Q must come before any keyword.
Book.objects.filter(Q(price__lt=20) | Q(on_sale=True), in_stock=True)Grouping with Parentheses
Wrap combined Q objects in parentheses to control precedence, just like grouping conditions in raw SQL.
Book.objects.filter((Q(a=1) | Q(b=2)) & Q(c=3))Build Filters Dynamically
Because Q objects are values, you can build them up conditionally in Python before passing the result to filter.
q = Q(active=True)
if term:
q &= Q(name__icontains=term)
User.objects.filter(q)Combine Many with reduce
Need an OR across a list of terms? Fold them together with operator.or_ to produce one combined Q.
from functools import reduce
import operator
reduce(operator.or_, [Q(tag=t) for t in tags])Still One SQL Query
However complex the logic, Django compiles your Q tree into a single WHERE clause, so there is no extra round trip.
When to Use Q
Reach for Q whenever a filter needs OR, NOT, or logic assembled at runtime; plain keywords stay fine for simple ANDs.
Quick Check
You want books whose title contains django OR flask. Which filter expresses that?
Recap
Q objects unlock OR, AND, and NOT logic you can group and build dynamically, all compiled into one query. 🧩
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Objek Q untuk Filter Kompleks” gratis?
Ya — teks lengkap “Objek Q untuk Filter Kompleks” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Django Academy, upgrade ke CoddyKit PRO. Kursus Django Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Objek Q untuk Filter Kompleks”?
Gabungkan kondisi dengan AND, OR, dan NOT Kamu berlatih Django Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Django Academy?
Tidak diperlukan pengalaman sebelumnya. Django Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Objek Q untuk Filter Kompleks” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Django Academy ini?
Ya. Setiap pelajaran Django Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- aggregate vs annotate
- Ekspresi F untuk Pembaruan Atomik
- Objek Q untuk Filter Kompleks
- Agregasi Kondisional dengan Case/When