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!