Skip to main content

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:

  1. Update the version in the pyproject.toml file.

  2. Build the package:

    poetry build
    
  3. Configure your PyPI credentials (if you haven't already):

    poetry config pypi-token.pypi <your-pypi-token>
    
  4. 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

django_smart_fixtures-2.0.3.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

django_smart_fixtures-2.0.3-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file django_smart_fixtures-2.0.3.tar.gz.

File metadata

  • Download URL: django_smart_fixtures-2.0.3.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.8.0-48-generic

File hashes

Hashes for django_smart_fixtures-2.0.3.tar.gz
Algorithm Hash digest
SHA256 09d006ccdac8da2cd5bf39d9c131e0dad37f370ed7a54058cb9452683063e62b
MD5 b0a71e112984f92faaf8b7ea145386fa
BLAKE2b-256 391522702c590da5fdf182f34b1b516d02eb02432af319cc5b507611b2ce3006

See more details on using hashes here.

File details

Details for the file django_smart_fixtures-2.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for django_smart_fixtures-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 268ac517f7d1bc800fa761188e254cb5d4b6f34c5213842250bf1bd15ef16cd1
MD5 9cdeae2fbbc844c98212f99ea86f45b0
BLAKE2b-256 d5731a76b9068659efc824df4a11a5582280fa048347503633fc5bddca10fa35

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page