#24778: Data Migration from Fixture
-----------------------------+--------------------
     Reporter:  9gix         |      Owner:  nobody
         Type:  New feature  |     Status:  new
    Component:  Migrations   |    Version:  master
     Severity:  Normal       |   Keywords:
 Triage Stage:  Unreviewed   |  Has patch:  1
Easy pickings:  0            |      UI/UX:  0
-----------------------------+--------------------
 Providing data via fixtures has been deprecated. In the past, we used to
 execute the loaddata manually. After Django introduce migration, the
 recommended way to import data is to create an empty migration and use
 `RunPython` migration operations to load the data.

 This is a very common use case for data migration via fixture. We create
 the function just to call_command `loaddata`.
 http://stackoverflow.com/a/25981899/764592

 In my opinion, instead of having to create the function, we can actually
 simplify this into a migration operation on its own.

 As follow:

 {{{
 # Module: django.db.migrations.operations.base.special
 from django.core.management import call_command
 class LoadFixture(Operation):
     reduces_to_sql = False
     reversible = False

     def __init__(self, *fixtures):
         self.fixtures = fixtures

     def state_forwards(self, app_label, state):
         pass

     def database_forwards(self, app_label, schema_editor, from_state,
 to_state):
         for fixture in self.fixtures:
             call_command('loaddata', fixture, app_label=app_label)

     def database_backwards(self, app_label, schema_editor, from_state,
 to_state):
         pass

     def describe(self):
         return "Load Fixture Operation"
 }}}

 The implication of `LoadFixture` operations can be shown in the following
 example:

 Assuming we have the fixture in `foobar/fixtures/book_data.json`
 {{{
 # File: foobar/migrations/0002_auto_load_book.py
 class Migration(migrations.Migration):
     dependencies = [
         ('foobar', '0001_initial'),
     ]
     operations = [
         migrations.LoadFixture('book_data'),
     ]
 }}}

--
Ticket URL: <https://code.djangoproject.com/ticket/24778>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/047.358c499c116e41c47f69fc5c25e907ec%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to