我使用此表单添加和更新帖子。当我想编辑帖子和更新图片时,如果帖子有图像,Django会添加['图像清除']复选框。但它不起作用。表格无效,如果我勾选复选框并选择新图像。但如果我只选择新图像(没有勾选复选框),它就有效。
我在寻找问题很长一段时间,但我没有找到。你能帮助我吗?抱歉我的英文
forms.py
class AddIdeaFrom(forms.ModelForm):
class Meta:
model = Idea
fields = ['title', 'description', 'image']
title = forms.CharField(max_length=500, widget=forms.TextInput(attrs={'class': 'form-control'}))
description = forms.CharField(max_length=500, widget=forms.Textarea(attrs={'class': 'form-control'}))
image = forms.FileField(required=False)
views.py
def idea_edit(request,idea_id):
if request.method == "GET":
idea = Idea.objects.get(id=idea_id)
edit_idea = AddIdeaFrom(initial={'title':idea.title,'description':idea.description,'image':idea.image})
return render(request, 'myidea/my/idea_edit.html', {'form':edit_idea, 'comment':idea.comment})
if request.method == "POST":
idea = Idea.objects.get(id=idea_id)
edit_idea = AddIdeaFrom(request.POST,request.FILES)
if edit_idea.is_valid():
edit_idea = AddIdeaFrom(request.POST, request.FILES, instance=idea)
if edit_idea.has_changed():
new_idea = edit_idea.save()
new_status = Status.objects.get(name = STATUS_REVIEW)
new_idea.status = new_status
new_idea.save()
return redirect('/')
else:
return HttpResponse('Need some changes')
else:
form = AddIdeaFrom(instance= idea)
return render(request, 'myidea/my/idea_edit.html', {'form': form})
HTML
<form method="post" class="post-form" enctype="multipart/form-data">
{% csrf_token %}
<label for="description.for_label" class="col-sm-9">Text</label>
{{ form.description }}
<label for="description.for_image" class="col-sm-9">Choose Image</label>
{{ form.image }}
<button type="submit" class="btn btn-space mb-">Add</button>
</div>
</form>
</div>
答案 0 :(得分:0)
从您的评论中看,您的表单中存在相互矛盾的数据存在问题。这可能是因为使用&#34; Clear&#34;带有FileField
小部件的复选框。在forms.py
:
image = forms.FileField(widget=FileInput, required=False)
这应该删除&#34;清除&#34;表单中的复选框。 或者,如果您不想让用户清除图像,您可以在验证前在视图中取消选择它。