Я могу использовать Django F () объекты с конкатенацией строк?

Я хочу выполнить обновление django через ORM, который выглядит примерно так:

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

Это заставляет MySQL выдавать исключение. Там должен так или иначе сделать это, не пишущий необработанный SQL?

33
задан Zach 21 July 2010 в 15:24
поделиться

1 ответ

Происходит то, что Django передает '+' в SQL, но SQL не позволяет использовать '+' для конкатенации, поэтому он пытается сложить численно. Если вы используете целое число вместо «строки», это действительно работает в том смысле, что оно добавляет целочисленное значение my_other_field к вашей переменной.

Спорный вопрос, является ли это ошибкой. В документации для объектов F () в поисковых запросах говорится:

Django поддерживает использование сложения, вычитания, умножения, деления и арифметики по модулю с F () объектов

, поэтому можно утверждать, что вам не следует пытаться использовать его для обновления с помощью строк. Но это определенно не задокументировано, и сообщение об ошибке «Неверное значение DOUBLE» не очень помогает. Я открою билет.

32
ответ дан 27 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: