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.py
from django.contrib import admin
from django.db import models
from image_uploader_widget.widgets import ImageUploaderWidget
from .models import YourModel
class YourModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ImageField: {'widget': ImageUploaderWidget},
}
与ModelForm
# forms.py
from django import forms
from 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.py
from django.contrib import admin
from image_uploader_widget.admin import ImageUploaderInline
from .models import Product, ProductImage
class ProductImageAdmin(ImageUploaderInline):
model = ProductImage
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