Проблема с десятичным полем в django v3.2

После обновления с версии 3.1 до версии 3.2 я обнаружил проблему с точностью использования десятичного поля. Следующий пример - это небольшой код, который может повторно создать проблему.

      from django.db import models

class Foo(models.Model):
    amount = models.DecimalField(
        null=False,
        decimal_places=18,
        max_digits=44)


# A simple insertion example 
from api.models import Foo
from django.db.models import F
from decimal import Decimal

f = Foo.objects.create(amount=Decimal('0.5'))
f.amount = F('amount') - Decimal('0.4')
f.save(update_fields=['amount', ])
f.refresh_from_db()
print(f.amount)

Этот код генерирует но тот же код в предыдущей версии дает ожидаемый результат . Проверяя запрос mysql, сгенерированный для запроса на обновление, я обнаружил, что в новой версии номер был отправлен с использованием цитаты, но в предыдущей версии цитаты не было. т.е. в новой версии у нас есть что-то вроде этого но в предыдущем у нас было . Также я должен упомянуть, что это происходит только в драйвере mysql, а не в sqllite.

Я знаю, что это похоже на ошибку, но я догадывался, что упускаю что-то тривиальное.

Я использую mysql-8.0.19, и у меня такое же значение было в версиях 3.2 и 3.2.3 django.

0 ответов

Другие вопросы по тегам