Les Crash-Devs d'un Passionné

Utiliser F() pour filter une requête Django à partir d'une colonne

/Catégorie/django

Temps de lecture : 1 minutes

Lorsque vous utilisez l'ORM de Django pour manipuler vos données vous utilisez

Log.objects.filter(level=DEBUG)

La méthode filter() permet de retourner les enregistrements liés aux critères présent dans les paramètres. Le nom du paramètre est l'attribut de l'objet et la valeur correspond au contenu à rechercher

clipboard
Copier le code
1
2
3
4
class Log:
  start = models.DateTimeField()
  end = models.DateTimeField()
  level = models.TextField()

Mais lorsque l'on souhaite filtrer notre recherche avec une autre colonne, comment procéder ?

Django met à disposition la fonction F() qui permet de faire référence à la propriété de notre modèle

from django.db.models import F

Voilà un exemple d'utilisation pour extraire des logs dont la date de fin est inférieure à la date de début (logique c'est pour la démo)

Log.objects.filter(start__lt= F('end'))