将django模板中的图像字段保存​​到表中

时间:2011-10-22 10:24:45

标签: python django

我的模板中有一个表单,如下所示:

   <form action="." method="GET" style="font-family: Tahoma; font-size: 12px">
         <table style="width: 100%;">
             <tr>
                 <td>
                     name: 
                 </td>
                 <td>
                     <input id="name" name="name" type="text"/>
                 </td>
             </tr>
             <tr>
                 <td>
                     <label>capacity :</label>&nbsp;</td>
                 <td>
                     <input id="capacity" name="capacity" type="text" />
                 </td>
             </tr>
             <tr>
                 <td>
                     <label>picture:</label>
                 </td>
                 <td>    
                     <input type="file" name="imageName_1" id="1"/></a>
                     </div>
                 </td>
             </tr>
             <tr>
                 <td>
                    &nbsp;
                 </td>
                 <td>
                    <input id="add" type="button" value="save"/>
                 </td>
             </tr>
         </table>
 </form>

我想要获得2个字段和图像,然后将它们保存到模型下面:

class Tour(models.Model):
   Name=models.CharField(max_length=100)
   capacity=models.SmallIntegerField() 
   image=models.ImageField(upload_to="gallery")

如何通过视图从我的模板中保存此图像?

1 个答案:

答案 0 :(得分:2)

您是否对django解释如何执行此操作的方式有特定问题? https://docs.djangoproject.com/en/dev/topics/http/file-uploads/

首先,您需要在enctype="multipart/form-data"代码中指定<form>

如果您必须手动执行此操作而不是利用Django表单框架的强大功能,则需要手动将文件/字段数据分配给模型。

def myview(request):
    image = request.FILES['imageName_1'] 
    tour = Tour()
    tour.Name = request.POST.get('name')
    tour.capacity = request.POST.get('capacity')
    tour.image.save(image.name, image)
    tour.save()

我建议将django的ModelForms作为一个视图/模板组合来执行此操作,并且可以在一分钟内编写更多(错误检查/重新显示)。

class MyForm(forms.ModelForm):
   class Meta:
       model = Tour

def myview(self):     
    if request.method == 'POST':
        form = MyForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
    else:
        form = MyForm()
    return render(request, 'my_template.html', {'form': form})


<form method='POST' enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" />
</form>