You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin后台实现多图片批量上传功能

解决方案

方案1:在Event编辑页内嵌多图上传(推荐)

无需单独跳转EventPhotos管理页,创建/编辑活动时可直接上传多张图片,操作更顺畅。
修改应用下的admin.py文件,代码如下:

from django.contrib import admin
from django import forms
from .models import Event, EventPhotos

# 自定义Event表单,新增多图上传字段
class EventAdminForm(forms.ModelForm):
    photos = forms.ImageField(
        label="上传活动图片",
        widget=forms.ClearableFileInput(attrs={"multiple": True}),
        required=False
    )

    class Meta:
        model = Event
        fields = "__all__"

# 内联展示已上传的活动图片
class EventPhotosInline(admin.TabularInline):
    model = EventPhotos
    extra = 0
    readonly_fields = ("photo",)

class EventAdmin(admin.ModelAdmin):
    form = EventAdminForm
    inlines = [EventPhotosInline]

    # 重写保存逻辑,批量创建图片关联记录
    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        photos = request.FILES.getlist("photos")
        for photo in photos:
            EventPhotos.objects.create(event=obj, photo=photo)

# 注册模型
admin.site.register(Event, EventAdmin)
# 若不需要单独管理EventPhotos可注释下面的注册代码
# admin.site.register(EventPhotos)

方案2:保留原操作流程,给EventPhotos管理页加批量上传

如果你还是希望沿用「先创建Event、再进入EventPhotos管理页上传」的原有流程,使用以下admin.py配置:

from django.contrib import admin
from django import forms
from .models import Event, EventPhotos

class EventPhotosAdminForm(forms.ModelForm):
    photos = forms.ImageField(
        label="上传多张图片",
        widget=forms.ClearableFileInput(attrs={"multiple": True}),
        required=True
    )

    class Meta:
        model = EventPhotos
        fields = ["event"]

class EventPhotosAdmin(admin.ModelAdmin):
    form = EventPhotosAdminForm

    def save_model(self, request, obj, form, change):
        event = form.cleaned_data["event"]
        photos = request.FILES.getlist("photos")
        for photo in photos:
            EventPhotos.objects.create(event=event, photo=photo)

admin.site.register(Event, admin.ModelAdmin)
admin.site.register(EventPhotos, EventPhotosAdmin)

必要配置检查

确保你的项目已经配置了媒体文件存储规则,否则图片无法正常存储和访问:

  1. settings.py中添加配置:
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
  1. 项目根urls.py中添加开发环境访问路由:
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的原有路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

内容的提问来源于stack exchange,提问作者Henry Davidson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 20:27:03