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
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
Comments
Please login first before commenting.