Django Programming error column does not exist even after running migrations

Solution 1:

I got the same problem (column not exist) but when I try to run migrate not with makemigrations (it is the same issue I believe)

  • Cause: I removed the migration files and replaced them with single pretending intial migration file 0001 before running the migration for the last change

  • Solution:

    1. Drop tables involved in that migration of that app (consider a backup workaround if any)
    2. Delete the rows responsible of the migration of that app from the table django_migrations in which migrations are recorded, This is how Django knows which migrations have been applied and which still need to be applied.

And here is how solve this problem:

  • log in as postgres user (my user is called posgres):

    sudo -i -u postgres

  • Open an sql terminal and connect to your database:

    psql -d database_name

  • List your table and spot the tables related to that app:

    \dt

  • Drop them (consider drop order with relations):

    DROP TABLE tablename ;

  • List migration record, you will see migrations applied classified like so:

id | app | name | applied
--+------+--------+---------+

SELECT * FROM django_migrations;
  • Delete rows of migrations of that app (you can delete by id or by app, with app don't forget 'quotes'):

    DELETE FROM django_migrations WHERE app='yourapp';

  • log out and run your migrations merely (maybe run makemigrations in your case):

    python manage.py migrate --settings=your.settings.module_if_any

Note: it is possible that in your case will not have to drop all the tables of that app and not all the migrations, just the ones of the models causing the problem.

I wish this can help.

Solution 2:

Django migrations are recorded in your database under the 'django_migrations' table. This is how Django knows which migrations have been applied and which still need to be applied.

Have a look at django_migrations table in your DB. It may be that something went wrong when your migration was applied. So, delete the row in the table which has the migration file name that is related to that column that 'does not exist'. Then, try to re-run a migration.

Solution 3:

Here's what i tried and it worked:

  • Go and add manually the column to your table
  • run python manage.py makemigrations
  • go back drop that column you added
  • run python manage.py migrate

Solution 4:

I had a similar issue - the error message appeared when I clicked on the model on the django-admin site. I solved it by commenting out the field in models.py, then running migrations. Following this I uncommented the field and re ran the migrations. After that the error message disappeared.