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 provides load_fixtures management command that allows you to load fixtures in a more convenient way. It uses Django's built-in loaddata command under the hood. Unlike loaddata, load_fixtures 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

Add django_smart_fixtures to your INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'django_smart_fixtures',
    ...
]

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',
    ],
    'images_dirs': [
        {
            'src': BASE_DIR / 'my_app' / 'fixtures' / 'images',
            'dest': BASE_DIR / 'media' / 'my_app' / 'images',
        },
        {
            'src': BASE_DIR / 'my_other_app' / 'fixtures' / 'files',
            'dest': BASE_DIR / 'media' / 'my_other_app' / 'files',
        },
    ],
}

Then you can load all these fixtures by running:

python manage.py load_fixtures

This 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.

NOTE: Using the above example, files from images will end up in the media/my_app/images folder, and files from files will end up in the media/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

This is exactly how paths should be defined in the fixture files:

- model: my_app.MyModel
  pk: 1
  fields:
    image: my_app/images/image1.jpg

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-0.1.0.tar.gz (4.8 kB view hashes)

Uploaded Source

Built Distribution

django_smart_fixtures-0.1.0-py3-none-any.whl (6.4 kB view hashes)

Uploaded Python 3

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