Django JSON字段
Posted
技术标签:
【中文标题】Django JSON字段【英文标题】:Django JSONField 【发布时间】:2017-12-15 21:09:42 【问题描述】:我们已经使用 jsonfield
库中的 JSONField 有一段时间了,但现在我们想使用原生的 PostgreSQL JSONField。所以我想知道是否可以更改现有模型的字段类型,保留旧字段名称并且不会丢失任何数据。谢谢。
【问题讨论】:
【参考方案1】:你想做的是data migration。
-
保留现有的
jsonfield
并添加新的PostreSQL JSONField
。
生成一个data migration,它遍历每条记录,将数据从旧字段迁移到新字段。
运行迁移后,您可以弃用旧字段并将其删除,而不会丢失任何数据。
参考文献
Django Data Migrations
【讨论】:
【参考方案2】:是的,您可以在不丢失数据的情况下更改字段的类型和名称。
每次更改 models.py 中的内容时,您只需运行 makemigrations
和 migrate
【讨论】:
当您更改名称或类型时,如果一种或两种情况都为真,则可能会丢失数据: 1. Django 无法确定您是否要添加新字段并删除旧字段一。 2. Django 不知道如何将一种类型转换为另一种。 (即:string
到 int
)。
1.这就是为什么当出现混乱时,django 会询问(在运行 makemigrations
时)并且您必须回答 Yes/No ,以防他没有理解您的意思,您可以随时编辑迁移文件 2. 在这种情况下,可能会有错误,但不会丢失数据以上是关于Django JSON字段的主要内容,如果未能解决你的问题,请参考以下文章