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

时间:2016-04-22 07:08:07

标签: python django postgresql django-orm

我已将数据存入我的数据库,如下所示

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。 谢谢!!

2 个答案:

答案 0 :(得分:1)

我不知道有一个类似于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没有办法生成它。

答案 1 :(得分:0)

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

为了更新这些字段,我没有尝试过,但我的猜测是:

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

由于JSON字段在python中就像字典一样,所以希望如此。