django从jsonfield的对象列表中获取价值总和

发布于 2025-02-04 18:11:22 字数 581 浏览 3 评论 0原文

我有一个具有以下实现的模型,

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

i具有这种格式的json:

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

我想用dentity的总和注释DB行(IE Quantity = 3对于此DB行),我尝试了多种方法,仍然没有正确的查询。

I have a model with the following implementation

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

The I have json in this format:

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

I want to annotate db rows with the sum of quantity (i.e. quantity = 3 for this db row), I have tried multiple approaches, still not getting the right query.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回眸一遍 2025-02-11 18:11:22

您可以添加一个名为数量 charfield的字段,然后覆盖clean()方法
从实例中计算数量。如果您想在Django Admin以外保持一致性,请不要忘记覆盖save()方法,以调用full_clean()方法。
这样的东西

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

You could add a field named quantities CharField, and override the clean() method
to calculate the quantities from the instance. Don't forget to override the save() method to call the full_clean() method if you wanna keep consistency outside of django admin.
Something like this

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文