我有一个表格,涉及上传个人资料图片。我可以在/admin/
界面上传图像并正确显示它们,但是我无法让我的Modelform
保存图像。你知道吗
以下是我所拥有的:
class Candidate(models.Model):
UserID = models.ForeignKey(User, on_delete=models.CASCADE)
ElectionID = models.ForeignKey(Election, on_delete=models.CASCADE)
Bio = models.CharField(max_length=500, blank=True)
ProfilePicture = models.ImageField(upload_to="profilepics/", null=True, blank=True)
class AddCandidateForm(forms.ModelForm):
class Meta:
model = Candidate
fields = ['ElectionID', 'Bio', 'ProfilePicture']
{% block content %}
<h1>Register as a candidate</h1>
<form method="POST" class="post-form">
{% csrf_token %}
<h2>Select an election:</h2><br>
{{form.ElectionID}}<br>
<h2>Enter your bio:</h2><br>
{{form.Bio}}<br>
<h2>Upload a profile picture:</h2><br>
{{form.ProfilePicture}}<br>
<button type="submit">Register</button>
</form>
{% endblock %}
当我尝试像这样的视图函数时,我得到了错误:MultiValueDictKeyError at /register/
"'ProfilePicture'"
def add_candidate(request):
if request.method == 'POST':
form = AddCandidateForm(request.POST, request.FILES)
if form.is_valid():
candidate = form.save(commit=False)
candidate = request.FILES['ProfilePicture']
candidate.UserID = request.user
candidate.save()
return redirect('/home/')
else:
form = AddCandidateForm()
return render(request, 'cand_reg.html', {
"form": form
})
当我删除有问题的行时,错误就消失了。你知道吗
def add_candidate(request):
if request.method == 'POST':
form = AddCandidateForm(request.POST, request.FILES)
if form.is_valid():
candidate = form.save(commit=False)
# candidate = request.FILES['ProfilePicture']
candidate.UserID = request.user
candidate.save()
return redirect('/home/')
else:
form = AddCandidateForm()
return render(request, 'cand_reg.html', {
"form": form
})
但是,这实际上并没有保存图像,因此当我尝试在单独的模板中渲染它时,会出现一个错误。你知道吗
有人能帮我理解为什么图片没有上传吗?你知道吗
提前感谢:)
必须设置模型的
ProfilePicture
属性,而不是实例本身(candidate = request.FILES['ProfilePicture']
)。你知道吗更改为:
更改您的HTML表单以接受文件。更改为:
<form method="POST" enctype="multipart/form-data" class="post-form">
。当表单包含文件输入(<input type="file" />
)时,它的编码方式必须与仅包含文本时的编码方式不同。更多here。如果右键单击并检查{{form.ProfilePicture}}
,您将看到这实际上是一个文件输入。额外的一个:
ProfilePicture
,UserID
等)。改用snake\u大小写(profile_picture
,user_id
等)。你知道吗相关问题 更多 >
编程相关推荐