Django ORM 将数据添加到现有的 JSON 文件中。

Django ORM to add data into existing JSONb filed.

我的数据库中已经有如下数据

id   |    updation_track
-----|-------------------------------
1    |   {'date1':'piyush','date2':'rakesh'}
     |
2    |   {'date1':'Neha'}

我想使用 django orm 添加更新轨道

models.objects.filter(id=1).add('updation_track':{'date3':'Rahul'})

我知道这是错误的查询,但我想实现这样的结果,这样我的输出应该如下所示:

 id  |    updation_track
-----|-------------------------------
1    |   {'date1':'piyush','date2':'rakesh','date3':'Rahul'}
     |
2    |   {'date1':'Neha'}

我使用的是 django 1.9 和 postgres 9.4 版。 谢谢!!

我不知道有像 update() 这样的单行程序,因为您需要检索和修改,但下面应该可以做到。

for obj in models.objects.filter(id=1).all(): 
    # assuming a more complicated filer in reality or just use get()
    obj.updation_track['date3'] = 'Rahul'
    obj.save()

有一些原始的 'sql' 可以做到这一点,但我认为 orm 没有办法生成它。

'updation_track' 是 JSON 字段吗?如果是这样,您可能需要检查 Django documentation JSON 个字段。

对于更新这些字段,我没有尝试过,但我的大胆猜测是:

models.objects.filter(id=1).update(updation_track = reduce(lambda x,y: dict(x, **y), (F('updation_track'), {'date3':'Rahul'})))

由于 JSON 字段在 python 中的作用类似于字典,希望这会起作用。