使用Python将JSON数组附加到另​​一个项目

时间:2015-10-17 10:21:46

标签: python json django postgresql

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

$scope.langs = [
    {"nl_NL": "Nederlands"},
    {"fr_FR": "Français"},
    {"en_US": "English"},
    {"de_DE": "Deutsch"},
    {"es_ES": "Español"}
];

编辑模型时,我想添加另一个水果(追加),因此结果只有少量JSON项,而model.fruits会返回这样的值:

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

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

2 个答案:

答案 0 :(得分:2)

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来保存单个对象是没有意义的,应该是一个容器,如列表

答案 1 :(得分:-1)

在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