django.db.utils.ProgrammingError:无法将类型text []强制转换为jsonb

时间:2017-07-16 22:13:34

标签: python django postgresql django-models django-jsonfield

我试图将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

这里可以做些什么?

3 个答案:

答案 0 :(得分:3)

您可以从

更新迁移文件
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),
    ),
]

答案 1 :(得分:1)

错误表明您正在尝试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)

答案 2 :(得分:0)

首先用

安装django-jsonfield
pip install jsonfield

然后替换

from django.contrib.postgres.fields import JSONField

from jsonfield import JSONField

您导入的JSONField不会扩展django.models字段,因此无法在此处使用。