在 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中文网其他相关文章!