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

Has*_*bal 3 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)
Run Code Online (Sandbox Code Playgroud)

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

django.db.utils.ProgrammingError: cannot cast type text[] to jsonb
LINE 1: ...ALTER COLUMN "solutions" TYPE jsonb USING "solutions"::jsonb
Run Code Online (Sandbox Code Playgroud)

在这里可以做什么?

ric*_*ier 18

您可以从

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

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),
    ),
]
Run Code Online (Sandbox Code Playgroud)


Raj*_*bit 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)
Run Code Online (Sandbox Code Playgroud)