Django admin后台多图片上传包django-image-uploader-widget

django自带的admin后台管理系统中常规的方式只能上传一张图片,无法上传添加多张图片,如下图。

图片通过给models添加一对多,在admin中使用inlines调用admin.TabularInline可实现多张图的上传。如图:

图片第三方包django-image-uploader-widget可以实现多图片上传

图片

django-image-uploader-widget为 Django 提供了一个漂亮的图像上传器小部件,并为 Django-admin 提供了一个多图像内联编辑器。
特征
支持必需和可选ImageField;
支持内部内联 django-adminImageField;
支持预览模态;
支持自定义内联用于 django-admin。
支持在 django-admin 内联内联内重新排序。
支持数据库。ArrayFieldPostgreSQL

效果图

图片

图片

图片

安装

pip install django-image-uploader-widget

在settings.py添加到已安装的应用程序,在:

INSTALLED_APPS = [    # ...    'image_uploader_widget',    # ...]

在admin仲使用

# admin.pyfrom django.contrib import adminfrom django.db import modelsfrom image_uploader_widget.widgets import ImageUploaderWidgetfrom .models import YourModel

@admin.register(YourModel)class YourModelAdmin(admin.ModelAdmin):    formfield_overrides = {        models.ImageField: {'widget': ImageUploaderWidget},    }

与ModelForm

# forms.pyfrom django import formsfrom image_uploader_widget.widgets import ImageUploaderWidget
class ExampleForm(forms.ModelForm):    class Meta:        widgets = {            'image': ImageUploaderWidget(),        }        fields = '__all__'

自定义内联图像上传
这是在创建自定义 django-admin 的基础上实现ImageUploaderInline的,以处理多个图像上传,admin.StackedInline仅使用模型来存储图像

# models.py
class Product(models.Model):    # ...
class ProductImage(models.Model):    product = models.ForeignKey(        Product,        related_name="images",        on_delete=models.CASCADE    )    image = models.ImageField("image")    # ...
# admin.pyfrom django.contrib import adminfrom image_uploader_widget.admin import ImageUploaderInlinefrom .models import Product, ProductImage
class ProductImageAdmin(ImageUploaderInline):    model = ProductImage
@admin.register(Product)class ProductAdmin(admin.ModelAdmin):    inlines = [ProductImageAdmin]

参考文档

github:https://github.com/inventare/django-image-uploader-widget官方文档:https://inventare.github.io/django-image-uploader-widget/
THE END