Лучшие практики для неизвестного max_length в Django? - PullRequest
0 голосов
/ 19 апреля 2019

После увеличения max_length другого поля в модели я начал задумываться: может быть, это не так?

Я получаю данные из внешнего API, поэтому не могу проверить, какая максимальная длина. Допустим, я предполагаю, что поле может иметь 100 символов - потому что это имеет смысл, но я не знаю, так ли это на самом деле, может появиться значение длиной 300 символов. Какой рекомендуемый подход здесь?

1) Усечь значение (куда я должен поместить код? И что с полями, такими как URL, которые не будут работать после усечения?)? 2) пропустить значение? 3) Установите длину каждого поля равной 100 * ожидаемая длина?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2019

Смысл max_length в том, что вы решаете это. Если вам действительно нужен текст переменной / неограниченной длины, используйте TextField.

max_length применяется на уровне базы данных. Если он длиннее, он просто потерпит неудачу. Если вы хотите обрезать его со стороны кода, вы должны сделать это самостоятельно, скорее всего, в функции, в которой вы создаете запись.

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

1 голос
/ 19 апреля 2019

Расширение ответа blue_notes. Я бы рекомендовал всегда использовать TextField вместо CharField , если тип данных не имеет фундаментальной максимальной длины. Например, коды валют ISO всегда содержат ровно 3 символа и имеют смысл как CharField.

Во многих ситуациях использование символьного поля максимальной длины приведет к ухудшению производительности в базе данных, чем использование поля varchar неограниченной длины , если длина поля на самом деле не фиксирована

...