#24026: migration RunPython operation ignores db router allow_migrate ----------------------------+----------------------- Reporter: dikamilo | Owner: nobody Type: Bug | Status: new Component: Migrations | Version: 1.7 Severity: Normal | Keywords: migration Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 ----------------------------+----------------------- I wrote custom router for SaaS architecture to handle different databases and custom management command to apply migrations for all databases. I'm sure that this router and command works properly.
All migrations works fine except migrations with {{{RunPython}}} command in operations - that migrations are executed ignoring {{{allow_migrate}}} policy in database router. For example in one of my app i have several migrations generated by django (manage.py makemigrations). My router checks if given app models should be in given database and if it return False, django not create table, not change schema etc. All works just fine and model is not in database. But if I create empty migration and add RunPython operation that add initial data to database for given model, django execute this migration throwing out error {{{django.db.utils.OperationalError: no such table}}}. I checked django code and for example in {{{AlterModelTable}}} operation {{{database_forwards}}} method uses {{{self.allowed_to_migrate}}}: {{{ def database_forwards(self, app_label, schema_editor, from_state, to_state): old_apps = from_state.render() new_apps = to_state.render() old_model = old_apps.get_model(app_label, self.name) new_model = new_apps.get_model(app_label, self.name) if self.allowed_to_migrate(schema_editor.connection.alias, new_model): schema_editor.alter_db_table( new_model, old_model._meta.db_table, new_model._meta.db_table, ) }}} To compare RunPython {{{database_forwards}}} method look like this (cut comments): {{{ def database_forwards(self, app_label, schema_editor, from_state, to_state): self.code(from_state.render(), schema_editor) }}} I think it's a bug and {{{RunPython}}} command should use {{{self.allowed_to_migrate}}} too. -- Ticket URL: <https://code.djangoproject.com/ticket/24026> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/051.34205d3d6489ca71b8a524c702c38343%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.