I want to rename a model in Django 3.2, keep my existing migrations and be
able to both migrate a db with the old table name and create a db from
scratch.
I've started by renaming the model class and all references to it in the
code. As "./manage.py makemigrations" did not automatically create a
migration, I manually created a migration that renames the model:
from django.db import migrationsclass Migration(migrations.Migration):
dependencies = [
('market_integrations', '0003_migration'),
]
operations = [
migrations.RenameModel('OldModelName', 'NewModelname')
]
My initial idea is that I should not update existing migrations, as I never
do when creating other migrations. However, the references to the old model
in the old migrations cause a LookupError when I run "./manage.py migrate".
I've tried using both the model name string and apps.get_model(). Migration
code samples that break:
operations = [
migrations.CreateModel(
name="OldModelName",
...
)
]
operations = [
migrations.CreateModel(
name=apps.get_model("myapp", "OldModelName"),
...
)
]
As keeping the old model name in old migrations didn't work, I replaced the
old model name in old migrations with the new name. After doing that,
"./manage.py migrate" ran successfully, including the model renaming
migration. However, when I try to create a new database, the model renaming
migration fails because that new database never had a table with the old
name.
What should I do to be able to preserve my migrations and have them working
in both existing and new databases?
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAKz%2BTUs%2B0mNkKB9O%3DTHnpUn0X8dL60P_46%2B8uudjiXt8P5VMXg%40mail.gmail.com.