Skip to content

Instantly share code, notes, and snippets.

@gemarkalmacen
Forked from rafaponieman/rename_app.py
Created March 4, 2024 10:02
Show Gist options
  • Save gemarkalmacen/aa5f0c9bb0465293b722664861a96345 to your computer and use it in GitHub Desktop.
Save gemarkalmacen/aa5f0c9bb0465293b722664861a96345 to your computer and use it in GitHub Desktop.
Django rename app management command
import argparse
from django.core.management.base import BaseCommand
from django.db import connection
class Command(BaseCommand):
help = 'Renames app. Usage rename_app [old_name] [new_name] [classes ...]'
def add_arguments(self, parser):
# Positional arguments
parser.add_argument('old_name', nargs=1, type=str)
parser.add_argument('new_name', nargs=1, type=str)
parser.add_argument('models', nargs=argparse.REMAINDER, type=str)
def handle(self, old_name, new_name, models, *args, **options):
with connection.cursor() as cursor:
# Rename model
old_name = old_name[0]
new_name = new_name[0]
cursor.execute("UPDATE django_content_type SET app_label='{}' WHERE app_label='{}'".format(new_name, old_name))
cursor.execute("UPDATE django_migrations SET app='{}' WHERE app='{}'".format(new_name, old_name))
for model in models:
cursor.execute("ALTER TABLE {old_name}_{model_name} RENAME TO {new_name}_{model_name}".format(
old_name=old_name, new_name=new_name, model_name=model))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment