django — десятичное поле max_digits, десятичные места объяснены

#python #django #django-models

Вопрос:

Поэтому я только начинаю с Django и использую его для хранения цен на форекс, которые представлены 1.21242 в виде 1.20641 , и т. Д…

model.py

 from django.db import models

# Create your models here.
class ForexPrice(models.Model):
    openPrice = models.DecimalField(max_digits=6, decimal_places=6)
    highPrice = models.DecimalField(max_digits=6, decimal_places=6)
    lowPrice = models.DecimalField(max_digits=6, decimal_places=6)
    closePrice = models.DecimalField(max_digits=6, decimal_places=6)
 

Мой Вопрос Таков:
Как работают атрибуты max_decimal и decimal_places? Я использую 6 для обоих полей, предполагая max_digits=6 , что значения будут храниться до 6 цифр, т. Е.: 123456.000000, в то время decimal_palces=6 как будут поддерживаться значения до 000000.123456.

Правильно ли это предположение или я что-то упускаю?

При сохранении записи в БД возникает следующая ошибка:

Поле с точностью 6, шкала 6 должна округляться до абсолютного значения меньше 1.

Комментарии:

1. docs.djangoproject.com/en/3.2/ref/models/fields/#decimalfield

2. @iklinac Спасибо, что поделились ресурсом. Да, я видел их документацию, однако приведенный ими пример не имел для меня смысла, пока я не увидел ответ KKAs ниже.

Ответ №1:

max_digits должно быть равно или выше, чем decimal_places .

Если бы у вас было 123456.654321, вам пришлось бы определить max_digits=12 , decimal_places=6 .

max_digits В ТОМ ЧИСЛЕ decimal_places .

Комментарии:

1. Ааа… Я понимаю. Теперь это действительно имеет больше смысла. Итак, если бы я хотел поддержать что-то вроде 9.123456, я бы использовал max_digits=7, decimal_places=6? Правильно?