Могу ли я получить доступ к столбцу django orm как строка + переменная? - PullRequest
1 голос
/ 13 октября 2019

Могу ли я получить доступ к столбцу django orm как строка + переменная?

Например, возможно ли это?

    for x in range(i, 98)
        CategoryNick.obejcts.filter(author=request.user).update("ca"+(x+1)=F('ca'+x))

или есть другой способ?

спасибо, дайте мне знать

1 Ответ

2 голосов
/ 13 октября 2019

Вы можете передать его со словарем и распаковать его. Фактически мы можем выполнять массовые обновления с помощью:

data = {'ca{}'.format(x+1): F('ca{}'.format(x)) for x in range(i, 98)}
CategoryNick.objects.filter(
    author=request.user
).update(<b>**data</b>)

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

UPDATE app_categorynick
SET ca2 = ca1, ca3 = ca2, ca4 = ca3, &hellip;, ca98 = ca97

Обратите внимание на две звездочки (**) впереди. Если вы вызываете функцию f(**some_dict) с some_dict, например some_dict = {'a': 4, 'b': 2}, она будет вызывать f с f(a=4, b=2).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...