我正在尝试编写一个可以一次上传多个文件的应用。我让该应用程序可以上传单个文件,但是添加循环以处理文件列表尚未奏效。
#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())
与request.FILES
一起使用,而不是f
,而改变似乎是打破这一局面的原因。除了这两种选择,我还应该拥有什么? request.FILES
仅会上传所选图片中的一张。
要传递给ImageForm
的正确对象是什么?
使用Python 3.6.8和Django 2.2.4
编辑:我还看到了关于多个文件上传的其他SO问题,包括建议的重复问题,但是没有一个问题让我清楚地知道ImageForm
需要什么对象(而不是我的示例中的f
)。 / p>