Значение из выражения 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-объектов

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