Исключение Django: decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
У меня странное поведение в коде.
Моя модель:
class Item(models.Model):
....
price = models.DecimalField(max_digits=5, decimal_places=2, help_text="Цена товара", verbose_name="Цена")
# price = models.IntegerField(help_text="Цена товара", verbose_name="Цена")
Когда я пытаюсь фильтровать объект:
class ProductBuyView(APIView):
def get(self, request, item_uuid: str, format=None):
product = Item.objects.all().filter(uuid__exact=uuid.UUID(item_uuid))[0]
...
Я получаю исключение
File "/home/lev/python_projects/taste_case_stripe/stripe_app/views.py", line 14, in get
product = Item.objects.all().filter(uuid__exact=uuid.UUID(item_uuid))[0]
File "/home/lev/python_projects/taste_case_stripe/venv/lib/python3.10/site-packages/django/db/models/query.py", line 445, in __getitem__
qs._fetch_all()
File "/home/lev/python_projects/taste_case_stripe/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1866, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/home/lev/python_projects/taste_case_stripe/venv/lib/python3.10/site-packages/django/db/models/query.py", line 117, in __iter__
for row in compiler.results_iter(results):
File "/home/lev/python_projects/taste_case_stripe/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1333, in apply_converters
value = converter(value, expression, connection)
File "/home/lev/python_projects/taste_case_stripe/venv/lib/python3.10/site-packages/django/db/backends/sqlite3/operations.py", line 344, in converter
return create_decimal(value).quantize(
decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
...decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
но когда я меняю тип поля на Int
class Item(models.Model):
....
price = models.IntegerField(help_text="Цена товара", verbose_name="Цена")
все в порядке. Как я полагаю, проблема в десятичном поле. Но что с ним не так...
попробуйте это:
from django.db import models
from django.db.models import Model
# Create your models here.
class DecimalModel(Model):
geeks_field = models.DecimalField(
max_digits = 5,
decimal_places = 2)
в просмотре:
from geeks.models import DecimalModel
# importing datetime module
import decimal
# creating an instance of
# datetime.date
d = decimal.Decimal(9.53)
# creating an instance of
# DecimalModel
my_object = DecimalModel.objects.create(geeks_field = d)
my_object.save()
Я предполагаю, что в вашей базе данных есть какая-то проблема с данными. Можете ли вы удалить все данные из вашей таблицы Item
? Проблема должна исчезнуть после этого. Как я вижу, вы используете SQLight, поэтому вы можете скопировать файл базы данных в качестве резервной копии и попробовать очистить таблицу Item
для диагностики источника проблемы.
Я нашел это. Я изменил DB на MySQL. И выполнил тот же запрос к хранилищу MySQL. В этом случае проблема исчезла.