python - 在带有 Django REST 框架的 Django 中,添加新字段时更新旧对象的最佳方法是什么?
问题描述
我有一个带有模型的数据库,我通过添加一个新字段来更新它。当我添加该字段时,数据库中的所有旧对象都使用空字符串值填充该字段。我需要这些字段具有值。
将来,对象将被强制包含规范或默认值的值。
为旧对象更新此字段的最佳方法是什么?
我有几个想法,但我不确定一个是否“合适”。同样,这只需要做一次,因为所有未来的对象都将拥有所有必需的数据。
- 通过添加
UpdateModelMixin
到 ViewSet 来启用 PUT,更新字段,然后禁用 PUT(我不希望 PUT 永久允许) - 创建某种迁移脚本来为我进行更新。
- 我错过了什么?
解决方案
我可能误解了这个问题,但是当您创建一个新字段时,您可以指定要填充到现有数据库中的默认值,以便您可以给它任何值:
https://docs.djangoproject.com/en/2.2/ref/models/fields/#default
如果您无法回滚并重新创建该字段,我将使用 Django shell 来执行此操作,因为这是一次性更改,类似于:
ModelName.objects.update(field='newvalue')
这样您就不需要更改配置或代码或任何东西。
推荐阅读
- javascript - 如果满足条件,如何将项目设置为 Liquid 中 for 循环中的第一个项目
- python-3.x - 使用 os.write 打印字体图标
- c++ - 分段错误(核心转储) - 从 SavedModel 使用 Tensorflow C++ API 进行推断
- javascript - ES6:WeakSet 上的 console.log 给出
- r - 逻辑回归的 glm() 结果
- java - 为什么我的 ForkJoinPool 程序运行这么慢?
- javascript - Array vs If 在索引 for 循环中的性能?
- vba - Access 2010 + VBA:参数化追加查询——一个有效,两个无效,但没有错误消息
- delphi - 在delphi的滚动框中滚动时如何查看组件是否不在视图中?
- flutter - 如何删除行中孩子之间的空间?