F () не имеет тип len для django - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь использовать F() для моего набора запросов

Мой предыдущий вопрос об использовании F() в F () выражениях в django продолжает давать мне 0

но потом я как-то понял, что не могу использовать длину F() для своей функции.Сначала я не понял, почему потом решил, что в итоге пытаюсь сделать len(F()), поэтому я получаю ошибку, поскольку F() - это тип <class 'django.db.models.expressions.F'> вместо типа string or number.

Есть ли способ получить значение F(), чтобы я мог использовать len(F())?

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 21 мая 2018

Пока вы хотите, чтобы это был один запрос в базе данных, вы должны использовать SQL, поэтому вы не можете просто применять произвольные функции Python.Чтобы взять длину столбца char, в Django есть выражение Length (https://docs.djangoproject.com/en/1.11/ref/models/database-functions/#django.db.models.functions.Length),), которое вы можете использовать следующим образом: Length(F('name')). Он добавит необходимый код к сгенерированному SQL, чтобы база данных работала правильно.

Итак, наконец, если вам нужно, например, установить для некоторого столбца длину другого значения столбца, вы можете использовать Model.objects.update(name_length=Length(F('name')))

...