在 Django ORM 中,您可能會遇到需要將 CharField 轉換為整數以進行查詢的場景。讓我們探索可用的選項:
原始查詢:
<code class="mysql">select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;</code>
標準查詢:
<code class="python">students.objects.filter(student_id__contains="97318").order_by('-student_id')</code>
此查詢缺少MySQL 查詢的轉換功能,導致不符。
使用 Cast 函數:
從 Django 1.10 開始,Cast 函數可以將欄位轉換為各種資料型別。在這種情況下,您可以使用:
<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>
原始查詢:
作為替代方案,您可以使用原始查詢來實現轉換:
<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>
以上是如何在 Django ORM 查詢中將 CharField 轉換為整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!