whens = [When(pk=x, then=_json['info'][str(x)]) for x in ids]
Clinics.objects.filter(pk__in=ids).update(
info_json=Case(*whens, output_field=JSONField())
)
我想使用JSONField()的Case-When语句执行批量更新。当我在一个愚蠢的循环中使用save()在每次迭代中执行此操作时,一切正常。但是上面的代码写道:django.db.utils.ProgrammingError: can't adapt type 'dict'
是关于第二行的。我也尝试了json.loads(),但是没有成功。我应该怎么做才能执行此多次更新?
我正在使用Python 3.6.3和Django 1.11.16
答案 0 :(得分:2)
目前,您只能遍历实例并一次更新一个实例。但是,Django 2.2将引入bulk_update()
来完成您想要的操作。
答案 1 :(得分:0)
实际上,在进行转换时,bulk_update很简单。这是无需迁移到Django 2.2的解决方案
field_type = Clinic._meta.get_field('info_json')
whens = [When(pk=x, then=Value(_json['info'][str(x)], output_field=field_type)
for x in ids]
Clinics.objects.filter(pk__in=ids).update(
info_json=Cast(Case(*whens, output_field=field_type),output_field=field_type)
)