Django получение суммы значений из списка объектов в json-поле

У меня есть модель со следующей реализацией

class MyModel(models.Model):
    data = models.JSONField(null=True, blank=True)

У меня есть json в таком формате:

{
  "name": "Name",
  "irrelevant_list": [],
  "items": [
    {
      "name": "Name 1",
      "quantity": 1,
      "other_list_of_objects": []
    },
    {
      "name": "Name 2",
      "quantity": 2,
      "other_list_of_objects": []
    }
  ]
}

Я хочу аннотировать строки базы данных с суммой quantity (т.е. количество = 3 для этой строки базы данных), я пробовал несколько подходов, но все еще не получил правильный запрос.

Вы можете добавить поле с именем quantities CharField, и переопределить метод clean() для вычисления количества из экземпляра. Не забудьте переопределить метод save() для вызова метода full_clean(), если вы хотите сохранить последовательность вне django admin. Что-то вроде этого

def clean(self):
    sum_of_quantities = 0
    for item in self.data['items']:
        sum_of_quantities += item['quantity']
    self.quantities = sum_of_quantities
    super(MyModel, self).clean()

def save(self, force_insert=False, force_update=False, *args, **kwargs):
    self.full_clean()
    instance = super(MyModel, self).save(force_insert, force_update, *args, **kwargs)
    return instance
Вернуться на верх