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

如何在Django Admin无需绑定模型上传文件并解决InMemoryUploadedFile问题

Django Admin 上传CSV写入对应模型的轻量实现方案

如果你需要在Django Admin后台上传CSV文件,将文件内容写入对应模型,无需扩展change_form.html、也不用重写response_change方法(我最初尝试过该方案,流程比较繁琐),可以直接通过自定义ModelForm的方式实现,代码如下:

from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
from django.conf import settings
from django import forms
from .models import Store

class StoreAdminForm(forms.ModelForm):
    # 添加额外的文件上传字段
    upfile = forms.FileField()

    class Meta:
        model = Store
        fields = "__all__"
    
    def clean(self):
        cleaned_data = super(StoreAdminForm, self).clean()

        if "upfile" in self.changed_data:
            # 此处可补充文件类型、大小等校验逻辑
            # 处理InMemoryUploadedFile类型的上传文件
            path = settings.MEDIA_ROOT.joinpath("___tmp___")
            tmp_file = default_storage.save(path, ContentFile(cleaned_data["upfile"].read()))
            
            # 读取临时文件内容
            with open(tmp_file, encoding = "utf8") as f:
                data = f.readlines()
            # 后续可自行补充解析CSV内容、写入对应模型的逻辑
            # ...

该方案核心解决了上传文件为InMemoryUploadedFile类型时无法直接按本地路径读取的问题,我之前在这个点上耗费了不少时间,整理出来供大家参考。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:07