Django:如果可能的话,将 CharField 转换为 Integer

标签 django python-3.x exception django-models

我有以下代码将字段 my_field 转换为整数以进行排序。

self.object_list = self.object_list.annotate(order_field=Cast('my_field', IntegerField())) \
                                   .order_by('order_field')

问题是某些数据字段可能是非数字的,因此会引发错误。有没有办法仅在可能的情况下Cast

我正在寻找两个案例 -

  1. 返回完整的object_list,对可能的对象进行排序,并将其他对象保留在前端/末尾。
  2. 仅返回 object_list,其中 my_field 可以转换为整数

最佳答案

Is there a way to Cast only if possible

您可以尝试使用extra :

self.object_list.extra(
    where=[
       "ISNUMERIC(my_field) = 1"
    ]
).annotate(
    order_field=Cast('my_field', IntegerField())
).order_by('order_field')

这将解决您的(2)要求并完成(1),您可以使用相同的查询将 where 更改为 select (请参阅文档)来注释某些内容就像 is_numeric 标志,然后按 order_fieldis_numeric 排序。

关于Django:如果可能的话,将 CharField 转换为 Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845355/

相关文章:

python - 在 django 中重新定义 home

python - Django:想要将一个空字段显示为空白而不是显示无

python - 使用Python进行CSV数据分析

java - 你怎么知道可能有异常(exception)?

python - 如何将用户与 django 中的帖子关联起来并根据登录的用户显示数据?

django-crispy-forms 输入大小

linux - 跨平台控制台清算?

python - Django Admin changeform_view 方法不允许打开编辑数据

eclipse - Tomcat加载Struts 2失败(异常启动过滤器struts2)

java - 插入排序列表时出现 IndexOutOfBounds 错误