Maison  >  Article  >  base de données  >  Comment convertir un CharField en un entier dans Django ORM ?

Comment convertir un CharField en un entier dans Django ORM ?

DDD
DDDoriginal
2024-11-02 22:05:02992parcourir

How to Cast a CharField to an Integer in Django ORM?

Casting Char Field en Integer dans Django ORM

Lors d'une requête avec Django ORM, vous pouvez rencontrer des scénarios dans lesquels vous devez convertir un champ de caractère à un entier. Cela peut survenir lorsque le champ est stocké en tant que CharField mais que vous souhaitez effectuer des calculs ou des comparaisons à l'aide de valeurs entières.

Pourquoi CAST n'est-il pas disponible ?

Dans les versions antérieures de Django, des requêtes SQL brutes ou des fonctions de base de données étaient nécessaires pour de tels scénarios. Cependant, avec l'introduction de la fonction Cast dans Django 1.10, vous pouvez réaliser ce casting dans l'ORM lui-même.

Utilisation de la fonction Cast

Pour lancer un CharField vers un entier, utilisez la syntaxe suivante :

<code class="python">from django.db.models import Cast, IntegerField

students.objects.annotate(
    student_id_int=Cast('student_id', IntegerField())
).filter(student_id_int__contains=97318).order_by('-student_id_int')</code>

Cela annotera l'ensemble de requêtes avec un nouveau champ appelé student_id_int, qui est converti en un type entier. Vous pouvez ensuite utiliser ce nouveau champ pour filtrer et trier comme vous le souhaitez.

Avantages de l'utilisation de Cast

L'utilisation de Cast offre plusieurs avantages :

  • Type-safe : Garantit que la valeur résultante est du type spécifié.
  • Évite les requêtes brutes : Conserve vos requêtes dans l'ORM, simplifiant la maintenance et réduisant le risque d'injection SQL.
  • Efficace : Effectue le casting efficacement au niveau de la base de données.

Référence

Pour plus d'informations sur le casting dans Django ORM, reportez-vous à la documentation :

  • [Fonctions de base de données : Cast](https://docs.djangoproject.com/en/stable/ref/models/database- fonctions/#cast)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn