Zach Zach - 3 months ago 15x
MySQL Question

Can I use Django F() objects with string concatenation?

I want to run a django update through the ORM that looks something like this:

MyModel.objects.filter(**kwargs).update(my_field=F('my_other_field')+'a string')

This causes MySQL to throw an exception. Is there anyway to do this without writing raw SQL?


What's happening is that Django is passing the '+' through to SQL - but SQL doesn't allow the use of '+' for concatenation, so it tries to add numerically. If you use an integer in place of 'a string', it does work in the sense that it adds the integer value of my_other_field to your variable.

It's debatable whether this is a bug. The documentation for F() objects in lookup queries states:

Django supports the use of addition, subtraction, multiplication, division and modulo arithmetic with F() objects

so it could be argued that you shouldn't be trying to use it to update with strings. But that's certainly not documented, and the error message 'Incorrect DOUBLE value' is not very helpful. I'll open a ticket.