Filtrare i dati in Django può essere fatto utilizzando il sistema di query di Django. Questo sistema di query consente di creare, recuperare, aggiornare e cancellare i record dal tuo database utilizzando Python. Django convertirà questo comando Python in query SQL, eseguirà la query sul database e ti restituirà i risultati. Alcuni esempi di utilizzo del sistema di query di Django per filtrare dati potrebbero includere la ricerca di tutti i modelli di un tipo specifico o la ricerca di un modello specifico utilizzando un id.
Ecco un semplice esempio di come si può filtrare i dati in Django.
Supponiamo di avere un’app Django che gestisce un blog e disponi di un modello `Post` con i seguenti campi: titolo, contenuto, autore e data di pubblicazione. Se volessi ottenere tutti i post di un autore specifico, potresti fare qualcosa di simile:
```
posts = Post.objects.filter(autore=‘Mario’)
```
Questo restituirà una lista di tutti i post di cui ‘Mario’ è l’autore. Se vuoi prendere un singolo post con un id specifico, faresti qualcosa del genere:
```
post = Post.objects.get(id=1)
```
Questo restituirebbe il post con id 1.
È anche possibile combinare più condizioni in un’unica chiamata di filtro. Ad esempio, potresti voler ottenere tutti i post scritti da ‘Mario’ che sono stati pubblicati nell’ultimo mese. Potresti fare qualcosa del genere:
```
from datetime import timedelta
from django.utils import timezone
un_mese_fa = timezone.now() – timedelta(days=30)
posts = Post.objects.filter(autore=‘Mario’, data_pubblicazione__gte=un_mese_fa)
```
La documentazione ufficiale di Django è una grande risorsa per saperne di più sul sistema di query di Django e su come utilizzarlo per filtrare i dati (fonte: https://docs.djangoproject.com/en/3.0/topics/db/queries/).
È importante notare che l’uso di `.filter()` restituirà sempre una queryset, anche se non ci sono corrispondenze. Invece, `.get()` solleverà un’eccezione `DoesNotExist` se non ci sono corrispondenze. Pertanto, è consigliabile utilizzare `.get()` solo quando si è sicuri che esista una corrispondenza.