Django annotate Concat - 表达式包含混合类型。您必须设置 output_field
Posted
技术标签:
【中文标题】Django annotate Concat - 表达式包含混合类型。您必须设置 output_field【英文标题】:Django annotate Concat - Expression contains mixed types. You must set output_field 【发布时间】:2017-07-03 14:51:24 【问题描述】:我有一个模型:
class Motocycle(models.Model):
title = models.CharField(max_length=50, blank=True, default='')
engine_displacement = models.IntegerField(default=0)
我想:
queryset = Motocycle.objects.annotate(
full_name=Concat(
'title',
Value(' '),
F('engine_displacement'),
Value('')
),
).all()
但出现错误:Expression contains mixed types. You must set output_field
:
queryset = Motocycle.objects.annotate(
full_name=Concat(
'title',
Value(' '),
F('engine_displacement'),
Value(''),
),
output_field=CharField(),
).all()
我尝试设置这个output_field
,结果是:'CharField' object has no attribute 'resolve_expression'
。
我做错了什么?谢谢。
【问题讨论】:
【参考方案1】:您必须将output_field
传递给您的数据库函数,在您的代码中将其传递给注释。
queryset = Motocycle.objects.annotate(
full_name=Concat(
'title',
Value(' '),
F('engine_displacement'),
Value(''),
output_field=CharField(),
),
).all()
【讨论】:
以上是关于Django annotate Concat - 表达式包含混合类型。您必须设置 output_field的主要内容,如果未能解决你的问题,请参考以下文章
django数据查询优化annotate和aggregate
使用 annotate() 包含一个 django 模型对象属性
Django Annotate - 我可以将在 annotate 中创建的字段用于在 annotate 中创建的另一个字段吗?