Я пытаюсь обновить и изменить строковое поле Django ORM. Эквивалентный SQL для этого:
UPDATE example_table SET string_field = REPLACE(string_field, 'old text', 'new text');
С этим запросом я ожидаю, что old text
и old text more text
будут заменены на new text
и new text more text
соответственно, для всех записей в столбце string_field
.
Массовое обновление() кажется многообещающим, но не позволяет мне изменять только часть поля, а Выражения F() реализуют только числовые изменения, а не замену строки. Я также рассмотрел использование необработанных запросов для запуска вышеуказанного SQL, но это похоже на боковую ручку (тем более, что F() существует для выполнения такая же функциональность для чисел), и я не мог заставить их фактически выполнить.
Я закончил с этим, но, похоже, стыдно выполнять все лишние запросы, когда я знаю, что для него требуется однострочный оператор SQL.
for entry in ExampleModel.objects.all():
entry.string_field = entry.string_field.replace('old text', 'new text', 1)
entry.save()
Эта функция еще не существует в Django ORM для строк? Есть ли что-то, что я забыл в документах?
Связанные вопросы SO: