首页 > 解决方案 > 在带有 Django REST 框架的 Django 中,添加新字段时更新旧对象的最佳方法是什么?

问题描述

我有一个带有模型的数据库,我通过添加一个新字段来更新它。当我添加该字段时,数据库中的所有旧对象都使用空字符串值填充该字段。我需要这些字段具有值。

将来,对象将被强制包含规范或默认值的值。

为旧对象更新此字段的最佳方法是什么?

我有几个想法,但我不确定一个是否“合适”。同样,这只需要做一次,因为所有未来的对象都将拥有所有必需的数据。

  1. 通过添加UpdateModelMixin到 ViewSet 来启用 PUT,更新字段,然后禁用 PUT(我不希望 PUT 永久允许)
  2. 创建某种迁移脚本来为我进行更新。
  3. 我错过了什么?

标签: pythondjangodatabasedjango-rest-framework

解决方案


我可能误解了这个问题,但是当您创建一个新字段时,您可以指定要填充到现有数据库中的默认值,以便您可以给它任何值:

https://docs.djangoproject.com/en/2.2/ref/models/fields/#default

如果您无法回滚并重新创建该字段,我将使用 Django shell 来执行此操作,因为这是一次性更改,类似于:

ModelName.objects.update(field='newvalue')

这样您就不需要更改配置或代码或任何东西。


推荐阅读