python - 使用 Django 表单上传多个文件
问题描述
我正在尝试编写一个可以一次处理上传多个文件的应用程序。我让应用程序为单个文件上传工作,但添加一个循环来处理文件列表还没有奏效。
#models.py
class image(models.Model):
filename = models.CharField(max_length=100, blank=False, null=False)
image = models.ImageField(upload_to='images/')
uploaded_at = models.DateTimeField(auto_now_add=True)
user = models.CharField(max_length=100, default='default')
形式:
class ImageForm(forms.ModelForm):
class Meta:
model = image
fields = ('image',)
widgets = {'image': forms.ClearableFileInput(attrs={'multiple':True}),} # Added to allow multiple file selections in one dialog box
和相关部分views.py
:
def image_upload(request):
if request.method == 'POST':
for f in request.FILES.getlist('image'):
formI = ImageForm(request.POST, f, instance=image())
if formI.is_valid():
fs = formI.save(commit=False)
fs.filename = f
fs.user = request.user
fs.save()
(视图中还有其他内容,但在此之前它会中断)。
结果是错误:
AttributeError: 'TemporaryUploadedFile' object has no attribute 'get'
从该行:if formI.is_valid():
我最初有formI = ImageForm(request.POST, f, instance=image())
withrequest.FILES
而不是f
,似乎改变是打破这一点的原因。我应该有什么而不是这两个选项?request.FILES
导致仅上传所选图像中的一张。
传递给的正确对象是ImageForm
什么?
使用 Python 3.6.8 和 Django 2.2.4
编辑:我已经看到关于多个文件上传的其他 SO 问题,包括建议的副本,但没有一个让我清楚地知道对象ImageForm
需要什么(而不是f
在我的示例中)。
解决方案
使用 django `formsets. 那应该可以解决您的问题,并且还可以查看此链接以获取完整的实施。
推荐阅读
- go - 调用 Close() 时,Kafka 消费者卡在 ReadMessage 上
- android - 是否可以在 Android 上强制或找出本机分辨率?
- javascript - 对于函数中的默认 DATE 参数,我必须在 Oracle 中检查哪些数据库参数?
- android - 当我更新我的 Android Studio 时,我得到一个字符串数组无法解析错误
- c# - 无法将文件从 Angular 8 上传到 .net core 2.2?
- python - 是否可以在 Azure Web App (Linux) 上的主机操作系统上安装包
- conda - 在检查目录属性时,conda 环境的磁盘使用量似乎比实际更大?
- google-cloud-platform - 大三角帆 UI 卡在身份验证上并最终超时
- reactjs - 重置输入字段 - 在屏幕上保持打印状态
- rust - 如何静态断言函数的结束是不可达的