django - 如何使用相同的值但使用现有字段之一的不同数据类型来注释 Django Queryset?
问题描述
我有Django model
一个NumberVal
字段是models.FloatField()
.
然后我需要queryset
像这样注释对象。annotate(numberval_as_text=str(OuterRef("NumberVal")))
- 相同的值,但作为字符串,除了这会引发QuerySet.annotate() received non-expression(s): OuterRef(NumberVal)
错误,这显然是正确的,但它证明了这一点。
我需要这个,因为这个注释后面跟着一个广泛的第二个注释,我numberval_as_text
在子查询过滤器中需要这个。
任何提示将不胜感激。
解决方案
调用str
一个对象显然会给你一个对象的字符串表示,因此你会得到错误。如果想输入大小写,他们可以使用Cast
数据库功能 [Django docs]:
from django.db.models import CharField
from django.db.models.functions import Cast
queryset.annotate(numberval_as_text=Cast(OuterRef("NumberVal"), output_field=CharField(max_length=256)))
注意:除非此注释在子查询中,否则您希望使用
F("NumberVal")
(from django.db.models import F
) 代替OuterRef("NumberVal")
推荐阅读
- javascript - 正则表达式匹配给定字符串后的文本,不包括字符本身
- wordpress - 如何删除按钮
- javascript - 注意有关滚动滑块的帮助
- omnet++ - OMNET++:无法将 openflow 扩展导入静脉
- c# - WebAPI 返回“堆栈不足,无法继续安全地执行程序。”
- python - 当我构建一个简单的模型时,在 keras 中引发了 InvalidArgumentError
- c# - 在文件返回类型的 MVC 操作中,文件下载在大约 1 分钟后停止
- asp.net-mvc - 如何在 MVC Razor 语法中设置默认图像
- php - 无法更改 WordPress 管理员邮件
- php - 测试文件下载,但禁止在命令行上输出文件内容