# django__django-15252 # Loki Mode Multi-Agent Patch # Attempts: 1 --- a/django/db/migrations/recorder.py +++ b/django/db/migrations/recorder.py @@ -1,5 +1,6 @@ from django.apps.registry import Apps from django.db import DatabaseError, models +from django.db import router from django.utils.functional import classproperty from django.utils.timezone import now @@ -62,20 +63,29 @@ class MigrationRecorder: return self.Migration._default_manager.using(self.connection.alias) def has_table(self): + if not router.allow_migrate(self.connection.alias, self.Migration): + return False with self.connection.cursor() as cursor: tables = self.connection.introspection.table_names(cursor) return self.Migration._meta.db_table in tables def ensure_schema(self): """Ensure the table exists and has the correct schema.""" + if not router.allow_migrate(self.connection.alias, self.Migration): + return if self.has_table(): return with self.connection.schema_editor() as editor: editor.create_model(self.Migration) def applied_migrations(self): - """Return a set of (app, name) of applied migrations.""" - self.ensure_schema() + """ + Return a dict mapping (app_name, migration_name) to Migration instances + for all applied migrations. + """ + if not router.allow_migrate(self.connection.alias, self.Migration): + return {} if self.has_table(): return {(migration.app, migration.name): migration for migration in self.migration_qs} else: @@ -84,10 +94,14 @@ class MigrationRecorder: def record_applied(self, app, name): """Record that a migration was applied.""" + if not router.allow_migrate(self.connection.alias, self.Migration): + return self.ensure_schema() self.migration_qs.create(app=app, name=name) def record_unapplied(self, app, name): """Record that a migration was unapplied.""" + if not router.allow_migrate(self.connection.alias, self.Migration): + return self.ensure_schema() self.migration_qs.filter(app=app, name=name).delete()