python - Django 迁移——如何在迁移过程中擦除模型?
问题描述
我有一个工作流程,其中模型是由脚本从也存储在数据库中的一些数据生成的:
SourceData -> management command generates -> Results
当我更改结果模型的生成方式时,比如添加一个新字段,我不想设置默认值或更新现有模型,我想删除所有模型,然后再次运行脚本以重新生成它们新领域:
Delete all Results -> run management command v2 -> Results (+ new field)
是否有捷径可寻?我在网上找到的只是如何通过删除整个数据库来实现这一点,这不是我想要的,我只想删除这个表并重新创建它。
解决方案
无法找出正确的方法,但设法通过以下方式破解它:
- 从干净的 git 历史记录开始(没有脏文件)——让接下来的步骤更容易
- 将相关模型重命名为其他名称,例如 Model2
- 运行 makemigrations
- 还原除生成的迁移之外的所有更改
- 将生成的迁移文件重新排序
DeleteModel
,CreateModel
然后将正在创建的模型的名称更改CreateModel
回原始模型名称。它应该如下所示:
class Migration(migrations.Migration):
dependencies = [
("<app name>", "<previous migration>"),
]
operations = [
migrations.DeleteModel(
name="ModelName",
),
migrations.CreateModel(
name="ModelName",
fields=[
# < all fields of your model >
],
options={
# < all meta options of your model >
},
),
]
推荐阅读
- javascript - 将 Cesium/Resium 与 npx create-react-app 的构建集成不起作用
- postgresql - 如何在 postgreSQL 上为 hstore 添加索引?
- android - 如何使用 Android CameraX 库缩放预览?
- react-native - 高程样式道具导致子组件出现问题
- jekyll - Disqus 和 Jekyll 的通用嵌入代码在哪里?
- reactjs - 如何为 PWA 应用程序中的所有浏览器绘制传单地图?
- android - 在启动时是否需要对共享库中的函数的引用,或者直到实际使用才需要?
- idris - 为什么 Idris 不能对以下代码进行类型检查?
- android - 如何从 Firebase 加载视频
- python - Cassandra 创建多个连接而不释放