【问题标题】:Append JSON array with another item using Python使用 Python 将 JSON 数组附加到另​​一个项目
【发布时间】:2016-01-16 02:09:48
【问题描述】:

我最近迁移到 Python 并且无法解决非常简单的问题(使用 Django)。模型具有 JSON 字段 (PostgreSQL),例如水果。更新实例时,我会这样做:

model.fruits = {"id": 1, "name": "apple"}
model.save()

在编辑模型时,我想添加另一个水果(追加),因此结果中的 JSON 项很少,而 model.fruits 将返回如下值:

[
    {
        "id": 1,
        "name": "apple"
    },
    {
        "id": 2,
        "name": "banana"
    },
    {
        "id": 3,
        "name": "orange"
    },
]

我试图搜索解决方案,但似乎此字典的附加功能会覆盖值,而不是附加它们。将项目附加到数据库中此 JSON 字段的快速方法是什么?也许有一个快速解决方法的库?

【问题讨论】:

    标签: python json django postgresql


    【解决方案1】:

    model.fruits = {"id": 1, "name": "apple"}* 定义了一个字典,你不能追加字典,你可以给它添加键

    您可以将元素附加到 JSON 数组中,例如如果 model.fruits 是一个数组(或列表,如 Python 中所称),例如

    model.fruits = [{"id": 1, "name": "apple"},]

    它定义了一个包含 1 个元素的数组,然后你可以追加到它

    model.fruits.append({"id": 2, "name": "banana"})

    一些参考资料:

    https://docs.djangoproject.com/en/1.8/ref/contrib/postgres/fields/#hstorefield https://docs.djangoproject.com/en/1.8/ref/contrib/postgres/fields/#arrayfield

    * 老实说,像fruits 这样以复数形式命名一个对象是没有意义的,应该是一个容器,比如一个列表

    【讨论】:

      【解决方案2】:

      在 Django 中,您应该创建一个名为 Fruit 的新模型。

      class Fruit(models.Model):
          name = models.Charfield(max_length=50)
      

      在您的主模型中,您应该有一个ManyToManyField

      fruits = models.ManyToManyField(Fruit, blank=True, related_name='model')
      

      这样你就可以在未来添加更多的字段来做过滤和其他的事情。

      向模型对象添加水果

      obj.fruits.add(1, 2)  # where 1 and 2 are id's  of fruits to add
      

      【讨论】:

        猜你喜欢
        • 2014-02-20
        • 2018-05-29
        • 2019-03-13
        • 2015-10-11
        • 2016-05-14
        • 2020-12-29
        • 1970-01-01
        • 2017-08-04
        • 2023-03-21
        相关资源
        最近更新 更多