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