Django модель усекает десятичное место при передаче в представление, когда установлено DecimalField - PullRequest
1 голос
/ 28 февраля 2020

Django Модель:

class TwoDecimal(models.Model):
   two_decimal = models.DecimalField(decimal_places=2, max_digits=10)

Вид:

def two_decimal(request):
    test = TwoDecimal(
        two_decimal = 30.00
    )
    test.save()
    return render(
        request,
        "test-template.html",
        {"test": test}
    )

Шаблон:

{{ test.two_decimal }}  #==> Displays as 30.0 instead of 30.00 (Despite it being a two decimal field.)

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

Почему django усекает это десятичное число?

1 Ответ

1 голос
/ 28 февраля 2020

Вы должны передать его десятичную дробь, сейчас вы передаете его float. Тот факт, что он затем сохраняется в DecimalField, не делает атрибут Decimal. Если вы позже получите его, то он действительно будет получен как десятичное число.

from decimal import <b>Decimal</b>

def two_decimal(request):
    test = TwoDecimal(
        two_decimal = <b>Decimal('</b>30.00<b>')</b>
    )
    test.save()
    return render(
        request,
        'test-template.html',
        {'test': test}
    )

Обратите внимание, что важно передать значение в виде string в конструктор Decimal , В противном случае это может привести к небольшим ошибкам округления и, кроме того, больше не будет содержать информацию о количестве цифр.

...