Django 注释 Concat - 表达式包含混合类型。您必须设置 output_field

Dan*_*kov 3 django annotate

我有一个模型:

class Motocycle(models.Model):
    title = models.CharField(max_length=50, blank=True, default='')
    engine_displacement = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

我想:

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value('')
    ),
).all()
Run Code Online (Sandbox Code Playgroud)

但是出现错误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()
Run Code Online (Sandbox Code Playgroud)

我试图设置这个output_field,结果是:'CharField' object has no attribute 'resolve_expression'

我做错了什么?谢谢你。

Dim*_*osh 6

您必须传递output_field给您的 db 函数,在您的代码中将它传递给注释。

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value(''),
         output_field=CharField(),
    ),
).all()
Run Code Online (Sandbox Code Playgroud)