Django concat F функция с характером - PullRequest
0 голосов
/ 21 октября 2018

У меня есть модель, которая имеет group_id CharField.Это поле должно равняться pk объекта с префиксом «#».

Я пытаюсь обновить базу данных таким способом.

MyModel.objects.update(group_id=f'#{F("pk")}')

Но это не работает.Фактически, он устанавливает '#F(pk)' строку для всех объектов.

Можно ли выполнить эту операцию с помощью функции F?

1 Ответ

0 голосов
/ 21 октября 2018

Вы используете функцию Concat [Django-doc] :

from django.db.models import F, Value
from django.db.models.functions import <b>Concat</b>

MyModel.objects.update(group_id=<b>Concat(</b>Value('#'), F('pk')<b>)</b>)

Это создаст запрос, который выглядит следующим образом:

UPDATE app_mymodel
SET group_id = CONCAT_WS('', '#', app_mymodel.pk)

(локально я получил этот запрос, но он может зависеть от серверной части и т. Д.)

Здесь _WS означает «с разделителем», но поскольку разделитель пуст,нет никакой разницы по сравнению с «простым» concat.

Обратите внимание, что, конечно, group_id здесь должен иметь тип (вероятно, CharField, который может принимать значения, сгенерированные этим выражением).

...