【发布时间】:2020-03-03 20:59:41
【问题描述】:
我正在尝试使用 Django 上传图像文件。我能够获取其他表单数据,但不能获取图像文件。 request.FILES 为空白。下面是我的代码。
models.py
class Module(models.Model):
title = models.CharField(max_length = 50)
slug = models.CharField(max_length = 50)
description = models.TextField(max_length = 500)
Forms.py
class ModuleAddForm(forms.ModelForm):
title = forms.CharField(max_length = 50, widget = forms.TextInput(attrs = {'class': 'form-control', 'placeholder': 'Title'} ))
description = forms.CharField(max_length = 50, widget = forms.Textarea(attrs = {'class': 'form-control', 'placeholder': 'Description'} ))
image = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}), required=False)
class Meta:
model = Module
fields = ['title', 'description', 'image']
Views.py
form = ModuleAddForm(request.POST, request.FILES or None)
if form.is_valid():
title = form.cleaned_data['title']
description = form.cleaned_data['description']
image = request.FILES['image]
HTML
<form class="kt-form" method = "POST" id="kt_form userform" enctype=”multipart/form-data” >{% csrf_token %}
<div class="form-group row">
<label class="col-3 col-form-label">Title</label>
<div class="col-9">
{{ form.title }}
</div>
</div>
<div class="form-group row">
<label class="col-3 col-form-label">Description</label>
<div class="col-9">
{{ form.description }}
</div>
</div>
<div class="form-group row">
<label class="col-3 col-form-label">Image</label>
<div class="col-9">
{{ form.image }}
</div>
</div>
<button type="submit" class="btn btn-brand">Save</button>
</form>
当我打印 request.FILES 时,它返回空白,当我尝试使用 Key 获取它时,它返回 MultiValueDict 错误。但是当我打印 request.POST 时,图像就在那里。但是没有用,因为没有上传图片。
我正在使用另一个模型来存储这个模型(模块)的图像文件,因为它可以包含多个图像。我在其他模型和功能中实现了相同的逻辑。它在那里正常工作,但在这里不工作。
我正在使用 Django 2.2。
【问题讨论】:
-
你的html在哪里?
-
使用调试器运行并尝试在这种情况下使用 dir 列出属性,添加此行以调试 import pdb;pdb.set_trace() 和 dir(vars) 以查看属性
-
@NishantNawarkhede 我已经添加了 HTML
-
我认为你错过了
action表单属性。 -
您正在使用 ModelForm 但您的模型中没有图像字段