Django DecimalField отклоняет все значения с 2 и более знаками после запятой

У меня есть модель:

class Account(models.Model):
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
    balance = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

с тестом:

@pytest.mark.django_db
class TestAccount:
    def test_it_accepts_valid_data(self):
        data = {"profile_id": create_profile().id, "balance": 10.55}

        account = Account(**data)
        account.full_clean()
        account.save()

Что приводит к неудаче с исключением:

FAILED wallets/tests/test_model.py::TestAccount::test_models - django.core.exceptions.ValidationError: {'balance': ['Ensure that there are no more than 2 decimal places.']}

Уменьшение тестового баланса до цифры с одним десятичным знаком, например, 10,5, проходит проверку. Интересно то, что увеличение аргумента decimal_places до более высокой цифры, например 5, все равно вызывает исключение на любую цифру с более чем одним десятичным знаком

Я что-то упускаю или это ошибка Django? Я использую python3.9 и Django 4.0.6

Плавающее значение 10.55 фактически хранится как 10.55000019073486328125, возможно, вам придется явно указать, что 10.55 - это десятичное значение, например Decimal('10.55'), вместо того, чтобы позволить ему оставаться плавающим значением

Вернуться на верх