In Django, un set di query estende la funzionalità del modello incorporato, permettendo di ottenere un insieme di risultati da un database tramite la creazione di query SQL più complesse.
Per esempio, immagina di avere un modello di blog con gli articoli pubblicati e non pubblicati. Potresti desiderare di avere un modo semplice per ottenere solamente gli articoli pubblicati. Con i set di query, puoi creare una funzione in un manager personalizzato che ti permette di farlo.
Ecco un esempio:
```
from django.db import models
class PubblicatiManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(stato=‘pubblicato’)
class Articolo(models.Model):
…
stato = models.CharField(…)
oggetti = models.Manager() # Il manager predefinito.
pubblicati = PubblicatiManager() # Il nostro manager personalizzato.
```
In questo esempio, `Articolo.pubblicati.all()` ti darà tutti gli articoli pubblicati.
Un set di query prende il suo nome dalla funzione `get_queryset` che è sovrascritta per implementare il comportamento personalizzato.
La funzione `get_queryset` di Django restituisce un oggetto QuerySet che definisce una serie di oggetti del database. Un QuerySet può essere filtrato, ordinato e “fatto a fette”, esattamente come una lista, ed è “pigro”, nel senso che non viene eseguito il database finché non ne hai bisogno.
Django fornisce molte funzioni di set di query per modificare i risultati o creare query complesse. Alcuni dei più comuni includono `filter`, `exclude`, `order_by`, `reverse`, `distinct`, `values`, `values_list`, `dates`, `datetimes` e molti altri. Puoi anche combinare i set di query per creare query più complesse.
In sintesi, un set di query Django è uno strumento potente per ottenere dati specifici dal database, evitando la necessità di scrivere codice SQL personalizzato.
Per approfondimenti consulta la documentazione Django ufficiale:
1. QuerySet API reference – https://docs.djangoproject.com/en/3.2/ref/models/querysets/
2. Making queries – https://docs.djangoproject.com/en/3.2/topics/db/queries/
3. Managers – https://docs.djangoproject.com/en/3.2/topics/db/managers/
Questi contengono informazioni dettagliate su QuerySet, la creazione di query e set di query personalizzati.