Какое наибольшее и наименьшее десятичное число можно сохранить с помощью DecimalField в Django? - PullRequest
0 голосов
/ 30 сентября 2018

Я не мог найти что-нибудь в документе.Для поля нам нужно предоставить два параметра: max_digits и decimal_places.

class Product(models.Model):
    price = models.DecimalField(max_digits=10, decimal_places=2)

В приведенном выше конфиге хранится до 99999999,99.Однако мне было интересно, существует ли максимальный или минимальный предел для этого поля, аналогично тому, как существуют эти ограничения для других полей.Например, IntegerField может хранить только от -2147483648 до 2147483647.

1 Ответ

0 голосов
/ 30 сентября 2018

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] проблем нет.

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