IntegerField
Для IntegerField
Джанго явно упоминает диапазон как:
class IntegerField(**options)
Anцелое число. Значения от -2147483648
до 2147483647
безопасны во всех базах данных, поддерживаемых Django.
Даже тогда это не само по себе ограничение, нос тех пор, это зависит от базы данных, чтобы поддержать это.Например, для MySQL потребуется INT
, что приведет к диапазону от -2'147'483'648 до 2'147'483'647.
DecimalField
Если мы посмотрим на исходный код , мы увидим, что две проверки сделаны:
digits_errors = [
*self._check_decimal_places(),
*self._check_max_digits(), ]
Если мы посмотрим глубжеэти проверки, мы только видим, что max_digits
должно быть больше нуля (поэтому > 0
), а decimal_places
больше или равно нулю (так >= 0
).
Но это делает не означает, что база данных сама по себе примет это.Например, в спецификациях MySQL для DECIMAL
мы видим:
Синтаксис объявления для столбца DECIMAL
: DECIMAL(M,D)
.Диапазоны значений для аргументов следующие:
M
- максимальное количество цифр (точность).Диапазон значений составляет от 1 до 65 . D
- это число цифр справа от десятичной точки (шкала).Он имеет диапазон от 0 до 30 и не должен превышать M
.
Так что даже если Django принимает определенные значения, это не означает, что каждый бэкэндприму это.Они также могут варьироваться в зависимости от базы данных.Например, в PostgreSQL мы имеем:
до 131072 цифр перед десятичной точкой ;до 16383 цифр после десятичной точки .
Таким образом, лучше обратиться к документации базы данных базы данных.Если вы попытаетесь определить таблицу, вы получите ошибку при переносе, поэтому вы можете просто «попытаться» использовать такие большие значения и посмотреть, сможет ли база данных их обработать.
При этом 65цифры, вероятно, будет достаточно для большинства приложений.Максимальное значение больше, чем квадрат * константы Авогадро [wiki] , поэтому если вы не хотите выполнять арифметику с числами, которые лучше выражать с помощью нотация Кнута со стрелкой вверх [wiki] проблем нет.