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
- Generate and render HTML Table by LLyaudet 6 days, 7 hours ago
- My firs Snippets by GutemaG 1 week, 2 days ago
- FileField having auto upload_to path by junaidmgithub 1 month, 2 weeks ago
- LazyPrimaryKeyRelatedField by LLyaudet 1 month, 3 weeks ago
- CacheInDictManager by LLyaudet 1 month, 3 weeks ago
Comments
Please login first before commenting.