0Pricing
Django Academy · Lezione

Oggetti Q per filtri complessi

Combinare condizioni con AND, OR e NOT

Oggetti Q per filtri complessi è una lezione Django Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Django Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Django Academy include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

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 Q

OR 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. 🧩

Domande Frequenti

La lezione «Oggetti Q per filtri complessi» è gratuita?

Sì — il testo completo di «Oggetti Q per filtri complessi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Django Academy, passa a CoddyKit PRO. Il corso Django Academy include 4 lezioni in totale.

Cosa imparerò in «Oggetti Q per filtri complessi»?

Combinare condizioni con AND, OR e NOT Eserciti Django Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Django Academy?

Non è richiesta alcuna esperienza precedente. Django Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Oggetti Q per filtri complessi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Django Academy?

Sì. Ogni lezione Django Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. aggregate o annotate
  2. Espressioni F per aggiornamenti atomici
  3. Oggetti Q per filtri complessi
  4. Aggregazione condizionale con Case/When
← Torna a Django Academy