How to remove an app from a django projects (and all its tables) How to remove an app from a django projects (and all its tables) django django

How to remove an app from a django projects (and all its tables)


First: Remove references in the code

  • remove app_to_remove from settings.INSTALLED_APPS
  • remove other references in urls.py or other places

Second: Clean the database

Create an empty migration for your django-project:

manage.py makemigrations your_django_project --empty

Edit the file. Here is a template:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import migrations, modelsclass Migration(migrations.Migration):    dependencies = [        ('your_django_project', '0001_initial'),    ]    operations = [        migrations.RunSQL('''        drop table if exists app_to_remove_table1;        drop table if exists app_to_remove_table2;        ....        delete from auth_permission where content_type_id in (select id from django_content_type where app_label = '{app_label}');        delete from django_admin_log where content_type_id in (select id from django_content_type where app_label = '{app_label}');        delete from django_content_type where app_label = '{app_label}';        delete from django_migrations where app='{app_label}';        '''.format(app_label='app_to_remove'))    ]

Run the migration, run tests.

About "drop if exists": You have two cases:

  1. The production system: You want to drop the tables.
  2. New development systems: These systems never had this app, and they don't have this table :-)


Note: this guide is successful with Django 3.1.1 and Python 3.8.2

Can you try this solution to clean your database and migrations first

Step 1: Delete your table from the file your_app/models.py but leave the file itself

Step 2: Check your register in the file admin.py if you have

Step 3: create migration:

manage.py makemigrations your_app

Step 4: migrate into database:

manage.py migrate

you can see the result in my exampleenter image description here

Step 5: delete all the files in the folder your_app/migrations

Step 6: Remove migrations in the table django_migrations

python manage.py migrate --fake your_app zero

Check migrations:

python manage.py showmigrations

Step 7: Then you can remove the app completely,check reference,INSTALLED_APPS