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'), вместо того, чтобы позволить ему оставаться плавающим значением