django-fixture-media
is a Django app that lets you have media files in your model fixtures. It upgrades Django's loaddata
command to copy media files in your fixture paths to your project's MEDIA_ROOT
directory. Its dumpdata
command also copies out references media files alongside the dumped fixture.
Install django-fixture-media
as any other Python package to your Django project's Python environment. Then add fixturemedia
to your INSTALLED_APPS
setting:
INSTALLED_APPS = (
#'django.contrib.admin',
# ...
'fixturemedia',
#'yourapp',
)
The management commands are named loaddata
and dumpdata
, overriding Django's built-in commands of the same names.
When you use dumpdata
to dump a fixture with media files, you necessarily need to write the fixture to disk, so that media files can be written with it. The dumpdata
command has a required --output
argument for specifying where on disk to write the file to.
$ ./manage.py dumpdata --output myapp/fixtures/archive.json
Any media files referenced by FileField
fields (including subclasses like ImageField
) in the dumped models will be written to a neighboring media/
directory.
$ ls -R myapp/fixtures/media | head -7
artwork
myapp/fixtures/media/artwork:
1067342064.jpeg
1266612525.jpg
1284255080.jpg
1420544354.jpg
To load a fixture, use loaddata
as you normally would.
$ ./manage.py loaddata myapp/fixtures/archive.json
Media files referenced by file fields in the loaded models are sought in media/
subdirectories inside the project's fixture paths. Found media files are copied from there to your project's MEDIA_ROOT
.
$ ls -R mysite/media | head -7
artwork
mysite/media/artwork:
1067342064.jpeg
1266612525.jpg
1284255080.jpg
1420544354.jpg