一次上传多个图像

时间:2020-02-07 10:02:16

标签: django

如何一次输入一次提交3张图像。

class Image(models.Model):
imageuploader_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, null=True, blank=True)
image = models.FileField(upload_to ='pictsagram/') 

2 个答案:

答案 0 :(得分:1)

我认为这不太复杂。您只需要一个带有文件输入的表单,该文件具有多属性,然后将所有文件保存在视图中。

例如一个非常基本的例子

#forms.py

class ImageForm(forms.Form):

    images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

您的html表单

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Upload</button>
</form>

然后使用字段上的getlist在视图中创建图像

    # views.py
    def images_upload(request):

        if request.method == 'POST':
            form = ImageForm(request.POST, request.FILES)
            if form.is_valid():
                for img in request.FILES.getlist('images'):
                    Image.objects.create(imageuploader_profile=request.user, image=img)
                return redirect('images_upload')

        form = ImageForm()

        context = {'form': form}

        return render(request, 'images.html', context)

答案 1 :(得分:0)

因此,我认为这是您需要利用ManyToMany关系字段,创建一个新的model实例来存储一个图像的实例,例如,(这很简单)版本,例如您需要的版本。

from django.db import models

class ImageAttachment(models.Model):
    file = models.FileField(upload_to ='pictsagram/')

然后,在您的图片模型中:

class Image(models.Model):
    imageuploader_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, null=True, blank=True)
    images = models.ManyToManyField(ImageAttachment)

然后,用户会将X张图像传递给服务器,此时您将创建多个图像,并将它们附加到Image模型的图像字段中。

随着代码组织的发展,我还将考虑重命名您的Image模型,因为它实际上存储着多个图像...