我试图将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
这里可以做些什么?
答案 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-jsonfieldpip install jsonfield
然后替换
from django.contrib.postgres.fields import JSONField
与
from jsonfield import JSONField
您导入的JSONField不会扩展django.models字段,因此无法在此处使用。