如何使用相同的值但现有字段之一的不同数据类型来注释 Django Queryset?
How to annotate Django Queryset with the same value but with a different data type of one of existing fields?
我有一个 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
database function [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)))
Note: Unless this annotation is in a subquery, you want to use F("NumberVal")
(from django.db.models import F
) instead of
OuterRef("NumberVal")
您不需要使用 OuterRef
。您可以只使用带有注释的普通转换。
from django.db import models
from django.db.models.functions import Cast
qs.annotate(numberval_as_text=Cast('NumberVal', output_field=models.CharField()))
我有一个 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
database function [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)))
Note: Unless this annotation is in a subquery, you want to use
F("NumberVal")
(from django.db.models import F
) instead ofOuterRef("NumberVal")
您不需要使用 OuterRef
。您可以只使用带有注释的普通转换。
from django.db import models
from django.db.models.functions import Cast
qs.annotate(numberval_as_text=Cast('NumberVal', output_field=models.CharField()))