Comment puis-je lance un char en entier lors de leurs recherches dans l'ORM de django?
Récemment commencé à utiliser l'ORM de Django.Je veux exécuter cette requête
select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;
où student_id est un CharField qui je veux, en tant qu'entier pour l'interrogation.
J'ai essayé avec
students.objects.filter(student_id__contains "97318").order('-student_id')
fonctionne très bien. Mais vous ne savez pas et ne pouvait pas trouver la manière de voter "student_id" int comme la requête MySQL mentionné ci-dessus avec "l'ORM de Django". devrais-je utiliser le raw de la requête ou est-il un moyen de sortir?
Laissez-moi savoir vos suggestions.
Il vous manque des
Vous ne pouvez pas commander des chaînes par le nombre de leurs valeurs.
Je suis d'accord, mais ne peut toujours pas expliquer pourquoi ce est être dans ORM, alors que sql brut pouvez effectuer tout beaux
sql brut n'est pas nécessaire ici.
=
sur le filter(...)
. Si cru requête qui fonctionne pour vous, je me demande est-il une raison particulière vous à utilisation d'un ORM?Vous ne pouvez pas commander des chaînes par le nombre de leurs valeurs.
"2" > "11"
mais 2 < 11
Je suis d'accord, mais ne peut toujours pas expliquer pourquoi ce est être dans ORM, alors que sql brut pouvez effectuer tout beaux
sql brut n'est pas nécessaire ici.
extra()
peut faire le travail tout aussi bien.
OriginalL'auteur Learner_Programmer | 2015-01-23
Vous devez vous connecter pour publier un commentaire.
Utilisation queryset de extra() méthode:
OriginalL'auteur catavaran
Une mise à jour de la variante sans nécessiter l'utilisation de
extra
est la fonction de distribution (nouveau dans Django 1.10):De https://docs.djangoproject.com/en/1.10/ref/models/database-functions/#cast
OriginalL'auteur erikreed
J'ai essayé
extra()
etannotate()
àCAST
, mais ils n'ont pas de travail bien des domaines connexes et génère REJOINT résultant inattendu queryset parfois.Que j'ai obtenu était de créer un Personnalisé de Recherche.
La documentation est peu mais peut être trouvé à ici et ici
Voici mon exemple:
Puis ci-dessous devrait fonctionner:
OriginalL'auteur KinoP