diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2013-09-06 12:32:52 -0500 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2013-09-06 12:39:46 -0500 |
| commit | 05e14e8eaf577e64dc45e26466ebb6117589e572 (patch) | |
| tree | 5be8b95ba8f5c991f66289e966b47c98e1d79e89 /django | |
| parent | a962286b74f1e8c8cb19fb45a057800da8c2fb56 (diff) | |
Migration autodetector now corerctly deals with proxy models
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/autodetector.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index 294f801435..3343d216d4 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -50,8 +50,20 @@ class MigrationAutodetector(object): self.migrations = {} old_app_cache = self.from_state.render() new_app_cache = self.to_state.render() + # Prepare lists of old/new model keys that we care about + # (i.e. ignoring proxy ones) + old_model_keys = [ + (al, mn) + for al, mn in self.from_state.models.keys() + if not old_app_cache.get_model(al, mn)._meta.proxy + ] + new_model_keys = [ + (al, mn) + for al, mn in self.to_state.models.keys() + if not new_app_cache.get_model(al, mn)._meta.proxy + ] # Adding models. Phase 1 is adding models with no outward relationships. - added_models = set(self.to_state.models.keys()) - set(self.from_state.models.keys()) + added_models = set(new_model_keys) - set(old_model_keys) pending_add = {} for app_label, model_name in added_models: model_state = self.to_state.models[app_label, model_name] @@ -130,7 +142,7 @@ class MigrationAutodetector(object): ) self.add_dependency(app_label, other_app_label) # Removing models - removed_models = set(self.from_state.models.keys()) - set(self.to_state.models.keys()) + removed_models = set(old_model_keys) - set(new_model_keys) for app_label, model_name in removed_models: model_state = self.from_state.models[app_label, model_name] self.add_to_migration( @@ -140,7 +152,7 @@ class MigrationAutodetector(object): ) ) # Changes within models - kept_models = set(self.from_state.models.keys()).intersection(self.to_state.models.keys()) + kept_models = set(old_model_keys).intersection(new_model_keys) for app_label, model_name in kept_models: old_model_state = self.from_state.models[app_label, model_name] new_model_state = self.to_state.models[app_label, model_name] |
