Opened 11 years ago
Closed 11 years ago
#21969 closed Bug (fixed)
Dependent apps do not handle fixture data properly when migration
Reported by: | Ubercore | Owned by: | |
---|---|---|---|
Component: | Migrations | Version: | dev |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | yes | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have app_a
, and app_b
. app_a
lists app_b
as a dependency, and app_b
has a fixture in initial_data.json
. When I run ./manage.py migrate
, the dependency is resolved correctly, and app_b
is migrated first. However, it seems that the fixture tries to load before the table exists:
$ ./manage.py migrate Operations to perform: Synchronize unmigrated apps: evolve, pipeline, mptt, sessions, admin, suit_redactor, sites, auth, reversion, contenttypes, django_extensions, taggit, suit, easy_thumbnails Apply all migrations: content, translation, sites, auth Synchronizing apps without migrations: Creating tables... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site Creating table easy_thumbnails_source Creating table easy_thumbnails_thumbnail Creating table reversion_revision Creating table reversion_version Creating table taggit_tag Creating table taggit_taggeditem Installing custom SQL... Installing indexes... Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/vagrant/ENV/src/django/django/core/management/__init__.py", line 427, in execute_from_command_line utility.execute() File "/home/vagrant/ENV/src/django/django/core/management/__init__.py", line 419, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/vagrant/ENV/src/django/django/core/management/base.py", line 287, in run_from_argv self.execute(*args, **options.__dict__) File "/home/vagrant/ENV/src/django/django/core/management/base.py", line 336, in execute output = self.handle(*args, **options) File "/home/vagrant/ENV/src/django/django/core/management/commands/migrate.py", line 125, in handle created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) File "/home/vagrant/ENV/src/django/django/core/management/commands/migrate.py", line 281, in sync_apps call_command('loaddata', 'initial_data', verbosity=self.verbosity, database=connection.alias, skip_validation=True) File "/home/vagrant/ENV/src/django/django/core/management/__init__.py", line 167, in call_command return klass.execute(*args, **defaults) File "/home/vagrant/ENV/src/django/django/core/management/base.py", line 336, in execute output = self.handle(*args, **options) File "/home/vagrant/ENV/src/django/django/core/management/commands/loaddata.py", line 56, in handle self.loaddata(fixture_labels) File "/home/vagrant/ENV/src/django/django/core/management/commands/loaddata.py", line 85, in loaddata self.load_label(fixture_label) File "/home/vagrant/ENV/src/django/django/core/management/commands/loaddata.py", line 140, in load_label obj.save(using=self.using) File "/home/vagrant/ENV/src/django/django/core/serializers/base.py", line 172, in save models.Model.save_base(self.object, using=using, raw=True) File "/home/vagrant/ENV/src/django/django/db/models/base.py", line 630, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/home/vagrant/ENV/src/django/django/db/models/base.py", line 692, in _save_table forced_update) File "/home/vagrant/ENV/src/django/django/db/models/base.py", line 736, in _do_update return filtered._update(values) > 0 File "/home/vagrant/ENV/src/django/django/db/models/query.py", line 595, in _update return query.get_compiler(self.db).execute_sql(CURSOR) File "/home/vagrant/ENV/src/django/django/db/models/sql/compiler.py", line 991, in execute_sql cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) File "/home/vagrant/ENV/src/django/django/db/models/sql/compiler.py", line 779, in execute_sql cursor.execute(sql, params) File "/home/vagrant/ENV/src/django/django/db/backends/utils.py", line 77, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/home/vagrant/ENV/src/django/django/db/backends/utils.py", line 61, in execute return self.cursor.execute(sql, params) File "/home/vagrant/ENV/src/django/django/db/utils.py", line 93, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/vagrant/ENV/src/django/django/db/backends/utils.py", line 61, in execute return self.cursor.execute(sql, params) File "/home/vagrant/ENV/src/django/django/db/backends/sqlite3/base.py", line 494, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: Problem installing fixture '/home/vagrant/seie/translation/fixtures/initial_data.json': Could not load translation.Language(pk=1): no such table: translation_language
In the example above, app_a is content, and app_b is translation. Also note that this example is run immediately after a reset_db
Change History (5)
comment:1 by , 11 years ago
Type: | Uncategorized → Bug |
---|
comment:2 by , 11 years ago
Needs tests: | set |
---|
comment:3 by , 11 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:4 by , 11 years ago
comment:5 by , 11 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
This bug is actually that initial_data shouldn't be loaded at all for apps with migrations, it's been deprecated (if you want to load initial data it's now suggested to use the RunPython operation and do it using the ORM).
I'll fix it so initial_data is only run for unmigrated apps.