Casting Char Field en Integer pour les requêtes ORM de Django
Lors de l'interrogation d'une base de données à l'aide du mappage objet-relationnel (ORM) de Django, cela peut être nécessaire de convertir un CharField en un entier à des fins de comparaison ou de tri. Cela peut être problématique car les CharFields sont stockés sous forme de chaînes par défaut.
Une approche pour surmonter ce défi consiste à utiliser la méthode filter() de Django ORM avec l'argument contain. Cependant, cette méthode vérifie uniquement les correspondances de chaînes.
Pour réaliser le casting dans l'ORM, Django propose la fonction Cast, qui peut convertir un champ en un type de données différent. Cette fonction a été introduite dans Django version 1.10.
<code class="python">from django.db.models import FloatField from django.db.models.functions import Cast # Assuming 'student_id' is a CharField students = Student.objects.annotate( converted_student_id=Cast('student_id', FloatField()) ).filter(converted_student_id__contains="97318").order_by('-converted_student_id')</code>
Dans cette approche mise à jour, la fonction Cast transforme le student_id CharField en FloatField, permettant la comparaison et le tri sur la valeur numérique plutôt que sur la valeur de chaîne. Cela fournit un moyen plus efficace et plus précis d’interroger vos données.
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!