我的模板中有一个表单,如下所示:
<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> </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>
</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")
如何通过视图从我的模板中保存此图像?
答案 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>