2

I am developing an app in Django.

I tried to add a Hstorefield to my model, then I deleted it, and now I cannot anymore run the command manage.py makemigrations because I always get this error

(met5) C:\Users\Tommaso\Django rest framework\Udemy Django\Metaglossario_Gestisco>python manage.py migrate Operations to perform:   Apply all migrations: admin, app_metaglossario, auth, contenttypes, sessions Running migrations:   Applying app_metaglossario.0045_model_node_data...Traceback (most recent call last):   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params) psycopg2.ProgrammingError: can't adapt type 'dict'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "manage.py", line 21, in <module>
    main()   File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
    fake_initial=fake_initial,   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\operations\fields.py", line 112, in database_forwards
    field,   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\base\schema.py", line 447, in add_field
    self.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
    cursor.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: can't adapt type 'dict'

(met5) C:\Users\Tommaso\Django rest framework\Udemy Django\Metaglossario_Gestisco>python manage.py makemigrations Migrations for 'app_metaglossario':   app_metaglossario\migrations\0054_model_node.py
    - Create model model_node

(met5) C:\Users\Tommaso\Django rest framework\Udemy Django\Metaglossario_Gestisco>python manage.py migrate Operations to perform:   Apply all migrations: admin, app_metaglossario, auth, contenttypes, sessions Running migrations:   Applying app_metaglossario.0045_model_node_data...Traceback (most recent call last):   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params) psycopg2.ProgrammingError: can't adapt type 'dict'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):   File "manage.py", line 21, in <module>
    main()   File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
    fake_initial=fake_initial,   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\migrations\operations\fields.py", line 112, in database_forwards
    field,   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\base\schema.py", line 447, in add_field
    self.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
    cursor.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value   File "C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: can't adapt type 'dict'

It looks like that Hstorefiels is still having some effects on my database.

I tried to empty the model in which I pu the Hstorefield, then delete it, but nothing. I even reset my database from Heroku, but the error keeps popping up.

How can I get rid of it?

Tms91
  • 3,456
  • 6
  • 40
  • 74
  • The only way I found to solve the problem was to manually delete the entire project and to git clone my backup in the same repository than before. – Tms91 Dec 03 '19 at 17:01

2 Answers2

2

Read the Django documentation for 2.0 or above, it is clearly stated that You need to Setup the hstore extension in PostgreSQL. I was also getting the same error, to solve this try this:

sudo su - postgres              //switch to postgres user
\c database;                     //connect your database
CREATE EXTENSION IF NOT EXISTS hstore;      //create extension
ARKhan
  • 1,724
  • 22
  • 30
2

Follow these steps to get it working

  1. In your settings add the django.contrib.postgres as part of the installed apps.

  2. create a migration before the migration that used the hstore field and Copy and paste the code below in the migration file.

    from django.db import models, migrations
    from django.contrib.postgres.operations import HStoreExtension, UnaccentExtension
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('main', '0001_initial'),
        ]
    
        operations = [
            HStoreExtension(),
            UnaccentExtension()
        ]
    
  3. Create the migration that adds the hstore fields.

  4. Run migration.

This worked for me!