Skip to main content

Reusable multiple file upload for Django admin in new UI style. Compatible with Django's default admin, Jazzmin, and Grappelli admin interfaces.

Project description

PyPI Downloads

django-admin-multiupload

Reusable multiple file upload for Django admin in new UI style. Compatible with Django's default admin, Jazzmin, and Grappelli admin interfaces. Install the package and use the mixins in your admin classes — the templates, CSS, and JS are bundled so you do not have to wire up static files manually.

Examples

Default Django Admin

Django Default Admin

Jazzmin Theme

Jazzmin Theme

Grappelli Theme

Grappelli Theme

Installation

# with uv
uv add django-admin-multiupload

# or pip
pip install django-admin-multiupload

Add the app to INSTALLED_APPS so Django can discover the bundled templates and static assets:

INSTALLED_APPS = [
    # ...
    "django_admin_multiupload",
]

Usage

models.py

from django.db import models


class Product(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name


class ProductImage(models.Model):
    product = models.ForeignKey(
        Product, on_delete=models.CASCADE, related_name="images"
    )
    image = models.ImageField(upload_to="product_images")

    def __str__(self):
        return self.product.name


class ProductFile(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="files")
    file = models.FileField(upload_to="product_files")

    def __str__(self):
        return self.product.name

admin.py

from django.contrib import admin

from django_admin_multiupload import MultipleUploadAdminMixin, MultipleUploadInlineMixin
from .models import Product, ProductFile, ProductImage


class ProductImageInline(MultipleUploadInlineMixin, admin.TabularInline):
    model = ProductImage
    extra = 1
    upload_field_name = "image"


class ProductFileInline(MultipleUploadInlineMixin, admin.TabularInline):
    model = ProductFile
    extra = 1
    upload_field_name = "file"


@admin.register(Product)
class ProductAdmin(MultipleUploadAdminMixin, admin.ModelAdmin):
    list_display = ("name", "price")
    search_fields = ("name", "description")
    inlines = [ProductImageInline, ProductFileInline]

That is it. The admin change form will render the drag-and-drop upload area and load the package's CSS/JS automatically.

How It Works

  1. Add MultipleUploadInlineMixin to your inline class and specify upload_field_name
  2. Add MultipleUploadAdminMixin to your ModelAdmin class that uses the inline
  3. The mixin automatically detects if the field is an ImageField or FileField
  4. Files are uploaded and saved automatically when you save the parent object

License

MIT License - see LICENSE file for details.

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_admin_multiupload-0.1.0.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_admin_multiupload-0.1.0-py3-none-any.whl (81.9 kB view details)

Uploaded Python 3

File details

Details for the file django_admin_multiupload-0.1.0.tar.gz.

File metadata

File hashes

Hashes for django_admin_multiupload-0.1.0.tar.gz
Algorithm Hash digest
SHA256 277716bebf24392034978204115321682ec3a1cadec813b0fe6b436227d1ca48
MD5 5414330b61024868684a3316e163325a
BLAKE2b-256 2a7f9841b44bd94b4883852f40e6c819bd806eba69e88f6ce953bf524b3b2ad5

See more details on using hashes here.

File details

Details for the file django_admin_multiupload-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_multiupload-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2761cc699b62062cd90a6c3d36e0d3f2e9fbd658b26e06309b97a545c2cdfca5
MD5 0174220f0aeb4aeada57f19ca2638834
BLAKE2b-256 88d8b13ada2d0c698c93ee4d6d2baa4963fee30f09c2809bb1c63fde50c40bfb

See more details on using hashes here.

Supported by

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