Rumah > Artikel > pangkalan data > Bagaimana untuk Menukar CharField kepada Integer dalam Pertanyaan ORM Django?
Dalam Django ORM, anda mungkin menghadapi senario di mana anda perlu menukar CharField kepada integer untuk tujuan pertanyaan. Mari terokai pilihan yang tersedia:
Pertanyaan Asal:
<code class="mysql">select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;</code>
Pertanyaan Standard:
<code class="python">students.objects.filter(student_id__contains="97318").order_by('-student_id')</code>
Pertanyaan ini tidak mempunyai fungsi pemutus pertanyaan MySQL, mengakibatkan ketidakpadanan.
Menggunakan Fungsi Cast:
Dari Django 1.10 dan seterusnya, fungsi Cast membolehkan penghantaran medan untuk pelbagai jenis data. Dalam kes ini, anda boleh menggunakan:
<code class="python">from django.db.models import FloatField from django.db.models.functions import Cast students.objects.annotate(student_id_int=Cast('student_id', FloatField()))\ .filter(student_id__contains="97318").order_by('-student_id_int')</code>
Pertanyaan Mentah:
Sebagai alternatif, anda boleh menggunakan pertanyaan mentah untuk mencapai pemutus:
<code class="python">from django.db import connection cursor = connection.cursor() cursor.execute(""" SELECT student_id FROM students WHERE student_id LIKE '%%97318%%' ORDER BY CAST(student_id AS UNSIGNED) DESC """) student_ids = cursor.fetchall()</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar CharField kepada Integer dalam Pertanyaan ORM Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!