Reputation: 1009
I developed a Django application deployed on DigitalOcean's Ubuntu server with Postgres db. Everything worked fine, without any problems, but today after adding new model, I'm getting this error:
relation "documents_app_document" does not exist
although I have this model, where some of my models inherits from Document
model. But somehow it was deleted from database, and now I can't add it back to database after migration. How can I add that model as a table again to database ?
p.s: But I've opened my migration file named '0001_initial.py', there is migrations.CreateModel( name='Document'...
models.py
:
class Document(models.Model):
created_date = models.DateTimeField(default=timezone.now, blank=True, null=True)
added_by = CurrentUserField()
purpose = models.CharField(blank=True, max_length=300, null=True)
def __str__(self):
return str(self.added_by)
class MedicalDocument(Document):
policy_number = models.CharField(max_length=20, blank=True, null=True)
medical_institution = models.CharField(max_length=100, blank=True, null=True)
Migration error:
Operations to perform:
Unapply all migrations: documents_app
Running migrations:
Rendering model states... DONE
Unapplying documents_app.0001_initial...Traceback (most recent call last):
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedTable: relation "documents_app_document" does not exist
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 234, in handle
fake_initial=fake_initial,
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/migrations/executor.py", line 121, in migrate
state = self._migrate_all_backwards(plan, full_plan, fake=fake)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/migrations/executor.py", line 196, in _migrate_all_backwards
self.unapply_migration(states[migration], migration, fake=fake)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/migrations/executor.py", line 269, in unapply_migration
state = migration.unapply(state, schema_editor)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/migrations/migration.py", line 175, in unapply
operation.database_backwards(self.app_label, schema_editor, from_state, to_state)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/migrations/operations/fields.py", line 120, in database_backwards
schema_editor.remove_field(from_model, from_model._meta.get_field(self.name))
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/base/schema.py", line 487, in remove_field
self.execute(sql)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/base/schema.py", line 137, in execute
cursor.execute(sql, params)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 99, in execute
return super().execute(sql, params)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/azersigorta/insuranceproject/env/lib/python3.5/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "documents_app_document" does not exist
Upvotes: 4
Views: 19311
Reputation: 31
I faced this error, I surfed whole Stackoverflow, I just try python(3) manage.py makemigrations --help
, and then I saw --skip-checks
and i just tried, It was amazing, It woked. I was trying to solve this error about 2 hours.
python(3) manage.py makemigrations --skip-checks
python(3) manage.py migration --skip-checks
python(3) manage.py runserver
And you'll see your localhost
The next times you just run the three commands without --skip-checks
I knew one thing that one of the best fixing is docs.
Upvotes: 3
Reputation: 49
I ran into the (seemingly) same problem. Could not run migrations or anything…
The reason in my case is :
I have 2 Databases (with a DB-Router). In one model of Database2 I use a function for a CHOICES-generation witch uses data from model-X of Database1. I wrote the function after the Creation of Database-1.Model-X.
When I now try to deploy the new migrations on the production system without the new Database-1.Model-X I get the same Error.
I saw 3 possibilities:
Upvotes: 0
Reputation: 533
Here is a possible workaround: Delete old migrations. Comment out all fields in all your models that relates to Document
model and perform makemigrations
and migrate
to create 'Document' table alone. Uncomment fields related to Document
in other models and make migrations again.
Upvotes: 0
Reputation: 284
After adding changing / adding a new model, always make sure to run python manage.py makemigrations
and python manage.py migrate
.
If for any reason (migration tree re-arrangement, database failure etc.) something went wrong, you can reverse to a specific migration by doing python manage.py migrate {app_name} {migration_index}
.
So what I would suggest in your situation is that you try python manage.py migrate {app_name} zero
, and then re-migrate back to the latest version.
You might also need to use --fake
.
Upvotes: 6