Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django annotate Concat - Expression contains mixed types. You must set output_field

I have a model:

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

and I want to:

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value('')
    ),
).all()

But got an error: 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()

I tryed to set this output_field, result was: 'CharField' object has no attribute 'resolve_expression'.

What I'm doing wrong? Thank you.

like image 753
Danila Kulakov Avatar asked Sep 05 '25 03:09

Danila Kulakov


1 Answers

You must pass output_field to your db function, in your code you pass it to annotate.

queryset = Motocycle.objects.annotate(
    full_name=Concat(
        'title',
         Value(' '),
         F('engine_displacement'),
         Value(''),
         output_field=CharField(),
    ),
).all()
like image 132
Dima Kudosh Avatar answered Sep 07 '25 21:09

Dima Kudosh