Don't be stupid, and load fixtures in a smart way
Project description
Django Smart Fixtures
DON'T BE STUPID, AND LOAD FIXTURES IN A SMART WAY!
Purpose
This Django package extends Django's loaddata
management command allowing you
to load fixtures in a more convenient way. Unlike original loaddata
,
this command allows you to load multiple fixtures without passing their labels
to the command. The only thing you need to do is to configure the fixtures to
load in the settings. Ah, yes... and it also allows you to easily upload media
files (images, files, etc.) from the fixtures.
Installation
pip install django-smart-fixtures
Configuration
Add smart_fixtures
to your INSTALLED_APPS
:
INSTALLED_APPS = [
...
'smart_fixtures',
...
]
FIXTURES
settings configuration
Let's say you have the following fixtures:
my_app/
└──fixtures/
├── fixtures1.yaml
├── fixtures2.yaml
└── images/
├── image1.jpg
└── image2.jpg
my_other_app/
└──fixtures/
├── fixtures3.yaml
└── files/
├── file1.txt
└── file2.txt
You can configure the fixtures to load in the settings:
# settings.py
FIXTURES = {
'labels': [
'fixtures1',
'fixtures2',
'fixtures3',
],
'media': [
{
'src': BASE_DIR / 'my_app' / 'fixtures' / 'images',
'dest': MEDIA_ROOT / 'my_app' / 'images',
},
{
'src': BASE_DIR / 'my_other_app' / 'fixtures' / 'files',
'dest': MEDIA_ROOT / 'my_other_app' / 'files',
},
],
}
Usage
Load fixtures configured in the FIXTURES
settings by running the following
command:
python manage.py loaddata --all
Using the above example, running this command will load all the fixtures defined
in fixtures1.yaml
, fixtures2.yaml
, and fixtures3.yaml
. It will also copy
all files from images
and files
folders to the media folder.
Defining fixtures for models with file fields
When defining paths to media files in the fixture files, you should use paths
relative to the media root directory. The media root directory is defined by the
MEDIA_ROOT
setting. The paths should be defined in the following way:
- model: my_app.MyModel
pk: 1
fields:
image: my_app/images/image1.jpg
Using the above example, files from images
will end up in the
{media_root}/my_app/images
folder, and files from files
will end up in the
{media_root}/my_other_app/files
folder. Relative to media root directory,
paths of copied files will be:
my_app/images/image1.jpg
my_app/images/image2.jpg
my_other_app/files/file1.txt
my_other_app/files/file2.txt
The above paths should be used in the fixture files for the models.ImageField
,
models.FileField
, and other file fields.
Media files configuration
Make sure to set the MEDIA_ROOT
and MEDIA_URL
settings in your Django
project. The MEDIA_ROOT
setting should point to the directory where the media
files will be stored. The MEDIA_URL
setting should point to the URL that will
be used to serve the media files.
# settings.py
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
Also, make sure to add the MEDIA_URL
to the urlpatterns
in the urls.py
:
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
YAML fixtures
If you're defining fixtures in YAML files, make sure to use .yaml
extension
instead of .yml
for the fixture files because Django's loaddata
command does
not support .yml
files.
Publishing to PyPI
To publish the package to PyPI, follow these steps:
-
Update the version in the
pyproject.toml
file. -
Build the package:
poetry build
-
Configure your PyPI credentials (if you haven't already):
poetry config pypi-token.pypi <your-pypi-token>
-
Publish the package:
poetry publish
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request or open an Issue.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_smart_fixtures-2.0.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d87b8152ad70e2b08a982b5117833699eeaf668c3298dd5062b7c3862bc5653 |
|
MD5 | d5483280ccb506b43d79a639593968f3 |
|
BLAKE2b-256 | 1dd6a91984bc33e8e1314ffcf9e15633f62425894d1c1cc960c7b8a2795887c2 |
Hashes for django_smart_fixtures-2.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 060920b96e719dbbc940d8e1d0f2a2a60cbb71b6bb88c288ced99862739602ec |
|
MD5 | 2f0878f5aacb9631154c4b393052fe54 |
|
BLAKE2b-256 | 200f33bca6759f25fb192383da5bdcd8cef9a8f0bbd0320beb7f26d8e0b8f128 |