Simple project to copy media files (intended for fixtures loads) to the file storage, pretty much as the django.contrib.staticfiles app does.
Forked from original project to add compatibility for newer python and django versions.
- Python 3.10+
- Django 5.2+
Other combinations probably supported but not tested.
pip install -r requirements_dev.txt uv tool install tox --with tox-uv tox
pip install django-media-fixturesThen, add the django_media_fixtures app in your settings.INSTALLED_APPS:
INSTALLED_APPS = [
...,
'django.contrib.staticfiles',
'django_media_fixtures',
...
]The app provides a management command collectmedia:
python manage.py collectmediaThis works similarly to collectstatic: finds the media_fixtures subdirectory in the apps directories, and copies those files to the settings.MEDIA_ROOT.
So, when you create your fixture (by any means, even through shell), put your file path matching the same tree folder layout as it should be in the MEDIA_ROOT destination.
For instance:
YourModel.objects.get_or_create(image="uploads/yourmodel/img/example.jpeg")Where the file example.jpeg is found in yourappfolder/media_fixtures/uploads/yourmodel/img/example.jpeg. The collectmedia management command will copy this file to uploads/yourmodel/img/example.jpeg inside the settings.MEDIA_ROOT directory.
- MEDIA_FIXTURE_FOLDERNAME
You can change the media fixtures folder's name on your apps, just putting this variable on settings.py.
MEDIA_FIXTURE_FOLDERNAME='my_media_fixtures_folder'
- MEDIA_FIXTURES_FILES_FINDERS
You can change the media fixtures finders, to search media files on other folders not in-app, for instance.
MEDIA_FIXTURES_FILES_FINDERS = ( 'django_media_fixtures.finders.FileSystemFinder', # combined with MEDIA_FIXTURES_FILES_DIRS, choose specific folders 'django_media_fixtures.finders.AppDirectoriesFinder', # default (if you do not set MEDIA_FIXTURES_FILES_FINDERS) )
- MEDIA_FIXTURES_FILES_DIRS
You can list specific media folders that you want to include on search.
MEDIA_FIXTURES_FILES_DIRS = [ "/home/user/myproject/mediafiles", "/opt/webfiles/common/", ]