首页 > 解决方案 > 列表中的 Django JSONfield 更新元素

问题描述

更新:感谢下面的评论,我正在更新问题。

我正在使用 JSONField 以这种格式存储元素列表:

[{“name”:“field1”,“value”:“100”,type:“number”},{“name”:“field2”,“value”:“500”,“type”:“number”} ]

我可以有更多的键,如“必需”、“类型”等。它的名称是唯一的。

这是我的模型:

from django.contrib.postgres.fields import JSONField
class MyModel(models.Model):
    json_data = JSONField(default=list, null=True) # Create an empty list always

我有一个表格来更新存储在 json_data 中的值,我像这样更新数据:

obj = MyModel.objects.get(pk=1)
json = obj.json_data # [{"name": "field1", "value": "100", , type:"number"}, {"name": "field2", "value": "500", type:"number"}]
new_data = {"name": "field2", "value": "99", type:"number"} # data to update that comes from form

fields_not_updated = [field for field in json
                          if new_data['name'] != field['name']] # Create a list of elements that are not updated

fields_not_updated.append(new_data) # Add the new data, output: [{"name": "field1", "value": "100", type:"number"}, {"name": "field2", "value": "99", type:"number"}]


obj.json_data = fields_not_updated # set new json
obj.save() # save object

我想知道是否有更简单或更有效的方法来更新列表中的元素并使用 django 函数或方法或直接使用 python 将它们保存在 JSONField 中。

标签: python-3.xdjangodjango-jsonfield

解决方案


推荐阅读