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 中的内容时,您只需运行 makemigrationsmigrate

【讨论】:

当您更改名称或类型时,如果一种或两种情况都为真,则可能会丢失数据: 1. Django 无法确定您是否要添加新字段并删除旧字段一。 2. Django 不知道如何将一种类型转换为另一种。 (即:stringint)。 1.这就是为什么当出现混乱时,django 会询问(在运行 makemigrations 时)并且您必须回答 Yes/No ,以防他没有理解您的意思,您可以随时编辑迁移文件 2. 在这种情况下,可能会有错误,但不会丢失数据

以上是关于Django JSON字段的主要内容,如果未能解决你的问题,请参考以下文章

django-rest-framework:如何序列化已经包含 JSON 的字段?

Django JSON字段

将 json 模型字段与 django 石墨烯一起使用

如何在 Django 中序列化(JSON)文件字段

如何从 django 模型中为模型字段定义 json 类型

如何编写查询以在 django 的 json 字段中查找值