使用Django表单上传多个文件

时间:2019-09-06 00:05:37

标签: python django django-forms

我正在尝试编写一个可以一次上传多个文件的应用。我让该应用程序可以上传单个文件,但是添加循环以处理文件列表尚未奏效。

#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>

1 个答案:

答案 0 :(得分:0)

使用Django`formsets。那应该可以解决您的问题,并查看此link以获得完整的实现。