Я хочу выполнить обновление django через ORM, который выглядит примерно так:
MyModel.objects.filter(**kwargs).update(my_field=F('my_other_field')+'a string')
Это заставляет MySQL выдавать исключение. Там должен так или иначе сделать это, не пишущий необработанный SQL?
Происходит то, что Django передает '+' в SQL, но SQL не позволяет использовать '+' для конкатенации, поэтому он пытается сложить численно. Если вы используете целое число вместо «строки», это действительно работает в том смысле, что оно добавляет целочисленное значение my_other_field
к вашей переменной.
Спорный вопрос, является ли это ошибкой. В документации для объектов F ()
в поисковых запросах говорится:
Django поддерживает использование сложения, вычитания, умножения, деления и арифметики по модулю с
F ()
объектов
, поэтому можно утверждать, что вам не следует пытаться использовать его для обновления с помощью строк. Но это определенно не задокументировано, и сообщение об ошибке «Неверное значение DOUBLE» не очень помогает. Я открою билет.