【问题标题】:How to upload and create multiple file objects with django如何使用 django 上传和创建多个文件对象
【发布时间】:2020-03-21 02:22:51
【问题描述】:

我是 Django 新手,我正处于编写 Web 应用程序的第一阶段。该应用程序的一项功能要求用户将多张图片上传到数据库。

我创建了一个“图像”模型来存储图片并在以后对其进行操作。用户应该使用 POST 请求一次上传多个图像(甚至不知道这是否可能)。 上传的每张图片都应该是数据库中的一个图像对象,但由于某种原因,我未能上传并创建该对象。当我发出 POST 请求时没有任何反应。我可能会在某些时候失败并且在一些简单的事情上失败。我会很感激一些帮助。

models.py

from django.db import models

class image(models.Model):

    image_field = models.FileField(upload_to='images/')

forms.py

from django import forms
from .models import image

class images_form(forms.ModelForm):
   class Meta:
        model = image
        fields = ['image_field']

        widgets = {
            'image_field' : forms.ClearableFileInput(
                attrs={'class': 'upload ','inputtype':'file','name':'images','multiple':True })}

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import images_form
from .models import image

def upload_files(request):

    context = {'images_form': images_form}

    if request.method == 'POST':
        form_images = images_form(request.POST, request.FILES)
        files = request.FILES.getlist('images')
        if form_images.is_valid():

            for file in files:
                newimg = image(image_field = file)
                print(newimg.name)
                newimg.save()

            return HttpResponse('images uploaded')

    else:

        return render(request, 'master_form/desk.html', context=context)

upload_images.html

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>
    <h1>Django Desk</h1>


    <div class="container-fluid">
    <h1> images</h1>

  <form method = "post" enctype = "multipart/form-data">
  {% csrf_token %}

  {{ images_form.as_p }}


  <button type = "submit"> Upload </button>
  </form>

</body>
</html>

【问题讨论】:

    标签: file-upload image-uploading


    【解决方案1】:

    我发现了问题所在。

     files = request.FILES.getlist('images')
    

    为空或不存在。

    您必须使用在定义模型字段时使用的相同名称,在我的例子中是“image_field”,而不是“images”。

    新代码如下所示(views.py):

     for file in request.FILES.getlist('image_field'):
                img = image(image_field=file)
                img.save()
    

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2019-05-15
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多