Django Requêtes avancées avec des objets F


Exemple

Un objet F () représente la valeur d'un champ de modèle ou d'une colonne annotée. Il permet de faire référence aux valeurs de champs de modèle et d'effectuer des opérations de base de données en les utilisant sans avoir à les extraire de la base de données en mémoire Python. - Expressions F ()

Il est approprié d'utiliser des objets F() chaque fois que vous devez référencer la valeur d'un autre champ dans votre requête. En soi, les objets F() ne veulent rien dire et ils ne peuvent et ne doivent pas être appelés en dehors d'un jeu de requête. Ils sont utilisés pour référencer la valeur d'un champ sur le même jeu de requête.

Par exemple, donné un modèle ...

SomeModel(models.Model):
    ...
    some_field = models.IntegerField()

... un utilisateur peut interroger des objets dont la valeur some_field correspond à deux fois son id en référençant la valeur du champ id lors du filtrage à l'aide de F() comme ceci:

SomeModel.objects.filter(some_field=F('id') * 2)

F('id') référence simplement la valeur de l' id pour cette même instance. Django l'utilise pour créer l'instruction SQL correspondante. Dans ce cas, quelque chose qui ressemble beaucoup à ceci:

SELECT * FROM some_app_some_model 
WHERE some_field = ((id * 2))

Sans les expressions F() , cela se ferait avec du SQL brut ou du filtrage en Python (ce qui réduit les performances, surtout quand il y a beaucoup d'objets).


Les références:

De la définition de la classe F() :

Un objet capable de résoudre les références aux objets de requête existants. - source F

Remarque: Cet exemple publié provient de la réponse répertoriée ci-dessus avec le consentement de TinyInstance.