Login

Loading initial data per model at table creation (useful with migrations)

Author:
GigiusB
Posted:
July 12, 2014
Language:
Python
Version:
1.4
Tags:
loaddata migration south
Score:
0 (after 0 ratings)

A very simple way of automatically loading data on model creation.

As I am using South I wanted an automatic way of loading initial data only when a new model is create during a migration. Django provides almost everything out of the box by providing the post_syncdb signal (triggered also by South migrate command) and the loaddata command.

The code will simply look for a an existing fixture named <model>_initial.* and invoke the loaddata command to try to load it

Note: beware post_syncdb signal is deprecated since version 1.7: it has been replaced by post_migrate.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import glob
from django.core.management import call_command
from django.db.models.signals import post_syncdb
import os

def fixtures_loading(sender, app, *args, **kwargs):
    created_models = kwargs.get('created_models', [])
    for model in created_models:
        pth = '%s/fixtures/%s_initial.*' % (os.path.dirname(app.__file__), model.__name__ )
        fixtures = glob.glob( pth )
        if fixtures:
            print "Found initial fixtures for %s fixtures:" % model.__name__, fixtures
            call_command('loaddata', '%s_initial' % model.__name__)

post_syncdb.connect(fixtures_loading)

More like this

  1. "Magic Link" Management Command by webology 1 month, 2 weeks ago
  2. Closest ORM models to a latitude/longitude point by simonw 1 month, 2 weeks ago
  3. Log the time taken to execute each DB query by kennyx46 1 month, 2 weeks ago
  4. django database snippet by ItsRLuo 1 month, 3 weeks ago
  5. Serialize a model instance by chriswedgwood 2 months, 3 weeks ago

Comments

Please login first before commenting.