Значение из выражения F в Django ORM не является десятичной дробью, и Objects должен иметь поле с именем
У меня есть следующие классы/модели, и я пытаюсь выполнить массовое обновление тысяч объектов Recipt, чтобы иметь объект Item JSON в разделе подробностей
from django.db import models
from schematics import models as schema_models
class Recipt(models.Model):
id = UUID()
is_red = models.BooleanField(default=False)
disputed_at = models.DateTimeField(null=True)
total_amount = models.DecimalField(max_digits=12, decimal_places=2)
details = JSONModelField(ReciptDetails)
class ReciptDetails(PickleableModel):
id = UUID()
item = schema_types.ModelType(Item)
class Item(schema_models.Model):
id = schema_types.UUIDType()
name = schema_types.StringType()
amount = schema_types.DecimalType()
description = schema_types.StringType()
При выполнении:
Recipt.objects.filter(Q(details__item=None), is_red=True).update(details__item=Item({"name": SOMECONST.HAPPY, "amount": F('total_amount')}))
Я получаю ошибку:
*** schematics.exceptions.DataError: {"amount": ["Value 'F(total_amount)' is not decimal."]}
Я предполагаю, что это происходит потому, что выражение F находится внутри класса Item (json-объект). Как правильно получить значение total_amount
из Recipt для добавления в json элемента?
Более того, когда я пытаюсь установить десятичное постоянное значение (чтобы обойти вышеуказанную проблему):
Recipt.objects.filter(Q(details__item=None), is_red=True).update(details__item=Item({"name": SOMECONST.HAPPY, "amount": Decimal("10.00")}))
Я понял:
django.core.exceptions.FieldDoesNotExist: Recipt has no field named 'details__item'
Есть идеи, как исправить эти проблемы? Я думаю, что это происходит из-за вложенности JSON-объектов