14

I was trying to include JSONField in my model:

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

However, when I try to migrate the database, it gives the following error:

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

What could be done here?

1

2 Answers 2

28

You can update the migration file from

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

to

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),
    ),
]
Sign up to request clarification or add additional context in comments.

2 Comments

Where is this code? I searched in settings.py but can't find "operations"
Sorry, I found the migrations folder
5

Error shows that you are trying to alter column and not add a new one. This column solutions seems to be declared as a Textfield (or Charfield) previously with data in it, which you are trying to convert to JSON field. That's why you are getting this error.

Better create a new field rather than altering a text field to JSON field and remove the previous field, if that is unnecessary.

from django.contrib.postgres.fields import JSONField

class Trigger(models.Model):
    new_solutions = JSONField(blank=True, null=True)

2 Comments

removing previous field and create a new one is working for me
If you want to retain the same name, all you have to do is comment the field, then do a makemigrations + migrate to completely remove the field, then uncomment that same field and add the modifications you'll like to do, then do another makemigrations + migrate.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.