首页 > 解决方案 > 从一个按钮上传多张图片

问题描述

我的目标是有一个按钮,用户可以从中上传多张图片。

我从这个堆栈帖子顶部回复中实现了批量图像上传功能。

它有点工作,但不是一个按钮,而是有多个用于图像上传的按钮 在此处输入图像描述

我将如何将其转换为一个按钮来上传要上传的多个图像

看法:

def testing(request):

ImageFormSet = modelformset_factory(PostImages, form=ImageForm, extra=1)
if request.method == 'POST':

    postForm = PostForm(request.POST)
    formset = ImageFormSet(request.POST, request.FILES,
                           queryset=PostImages.objects.none())


    if postForm.is_valid() and formset.is_valid():
        testID = postForm.save(commit=False)
        testID.user = request.user
        testID.save()

        for form in formset.cleaned_data:
            #this helps to not crash if the user   
            #do not upload all the photos
            if form:
                image = form['image']
                photo = PostImages(post=PostForm, image=image)
                photo.save()
        # use django messages framework
        messages.success(request,
                         "Yeeew, check it out on the home page!")
        return HttpResponseRedirect("/")
    else:
        print(postForm.errors, formset.errors)
else:
    postForm = PostForm()
    formset = ImageFormSet(queryset=PostImages.objects.none())
return render(request, 'blog/test.html',
              {'postForm': postForm, 'formset': formset})

模板:

<form id="postID" method="post" action="" enctype="multipart/form-data">

{% csrf_token %}
{% for hidden in postForm.hidden_fields %}
{{ hidden }}
{% endfor %}

{% for field in postForm %}
{{ field }} <br />
{% endfor %}

{{ formset.management_form }}
{% for form in formset %}
{{ form }}
{% endfor %}


<input type="submit" name="submit" value="Submit" />

模型:

class Post(models.Model):
title = models.CharField(max_length=100)
hero_image = models.ImageField(default='default.jpg', upload_to='hero_images')
content = RichTextUploadingField(blank=True, null=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)

class PostImages(models.Model):
post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
image = models.ImageField(upload_to='post_images')
date_posted = models.DateTimeField(default=timezone.now)

标签: djangodjango-forms

解决方案


推荐阅读