Search code examples
djangodjango-fixturesdjango-migrations

Hook to perform actions after loaddata command (loading fixtures)


There's post_syncdb signal to perform actions that can be done after syncdb. Is there a similar hook to perform some actions after loading fixtures i.e. after python manage.py loaddata command ?

I have a script that creates a new database, runs migrate (syncdb) and loads data from JSON fixtures. Post all this, I want to create groups & permissions for users that have been created. Where do I plug that code?

P.S. Use post_migrate instead of post_syncdb for 1.7+


Solution

  • Read the source, Luke.

    Research how post_migrate (or post_syncdb) signal is fired in the management command, see:

    From what we've seen, here is what you should try:

    • create a custom signal (and listener where you would create groups & permissions)
    • create a custom management command subclassing loaddata Command and overriding handle() method:

      from django.core.management.commands.loaddata import Command
      
      class MyCommand(Command):
          def handle(self, *fixture_labels, **options):
              super(MyCommand, self).handle(*fixture_labels, **options)
      
              my_signal.send(sender=self.__class__, my_argument=my_argument_value)
      

    Haven't personally tested this. Hope it works for you.