8

我试图在我的模型中包含 JSONField:

from django.contrib.postgres.fields import JSONField
class Trigger(models.Model):
    solutions = JSONField(blank=True, null=True)

但是,当我尝试迁移数据库时,会出现以下错误:

django.db.utils.ProgrammingError: cannot cast type text[] to jsonb
LINE 1: ...ALTER COLUMN "solutions" TYPE jsonb USING "solutions"::jsonb

在这里可以做什么?

4

2 回答 2

18

您可以从以下位置更新迁移文件

operations = [
    migrations.AlterField(
        model_name='foo',
        name='bar',
        field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
    ),
]

operations = [
    migrations.RemoveField(
        model_name='foo',
        name='bar',
    ),
    migrations.AddField(
        model_name='foo',
        name='bar',
        field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
    ),
]
于 2019-09-11T05:38:55.443 回答
5

错误表明您正在尝试alter column and not add a new一个。此列solutions之前似乎被声明为 Textfield(或 Charfield),其中包含数据,您正在尝试将其转换为 JSON 字段。这就是您收到此错误的原因。

如果没有必要,最好创建一个新字段,而不是将文本字段更改为 JSON 字段并删除前一个字段。

from django.contrib.postgres.fields import JSONField

class Trigger(models.Model):
    new_solutions = JSONField(blank=True, null=True)
于 2017-07-17T04:45:32.333 回答