I found an alternate way to initialise Django application data. The usual method is to create specially named SQL data files (as described in the documentation) which are executed as
syncdb creates your model tables. SQL is generally adequate, but sometimes, more complex initialisation is best be in code.
To run your own code each time
syncdb is executed, Put the following code into a file named
management.py, in your application directory (the same directory as models.py).
from django.dispatch import dispatcher from django.db.models import signals from myproj.myapp import models def init_data(): # Your initialisation code here pass dispatcher.connect(init_data, sender=models, signal=signals.post_syncdb)
Here’s how it works. When you run
syncdb, Django first imports each application’s
management.py. The last line of code in this module (
dispatch.connect…), tells the Django dispatcher to listen out for the ”
post_syncdb” signal, and to call the
init_data function when it hears it. Later, when
syncdb completes, it fires the
post_syncdb signal, which cases the dispatcher to call your
The net effect is, each time you do a
syncdb, @init_data is called.