在 Django 中使用 JSONField 批量更新
Bulk update with JSONField in Django
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
暂时您无法迭代实例并一次更新它们。但是,Django 2.2 将引入 bulk_update()
来满足您的需求。
实际上 bulk_update 是简单的 case-when 转换。这是不迁移到 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)
)
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
暂时您无法迭代实例并一次更新它们。但是,Django 2.2 将引入 bulk_update()
来满足您的需求。
实际上 bulk_update 是简单的 case-when 转换。这是不迁移到 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)
)