2015-10-17 36 views
0

我最近迁移到Python并不能解决很简单的问题(使用Django)。一个模型有JSON字段(PostgreSQL),可以说例如水果。当更新的情况下,我不喜欢这样写道:使用Python追加JSON数组与另一个项目

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

在编辑模式,我想补充的又一硕果(追加),这样的结果将有几个JSON项目,model.fruits将返回值像这样:

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

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

回答

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

在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