我最近迁移到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字段的快速方法是什么?也许有一个快速解决方法的库?
答案 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