Python Django表单在我尝试更新图像时无效
我使用此表单添加和更新帖子。当我想编辑帖子和更新图片时,如果帖子有图片,Django会添加['image-clear']复选框。但是它不起作用。若我勾选复选框并选择“新建图像”,则表单无效。但若我仅选择“新建图像”(不勾选复选框),则表单有效 我一直在寻找什么问题,但我没有找到。你能帮助我吗?对不起我的英语 forms.pyPython Django表单在我尝试更新图像时无效,python,django,forms,image,validation,Python,Django,Forms,Image,Validation,我使用此表单添加和更新帖子。当我想编辑帖子和更新图片时,如果帖子有图片,Django会添加['image-clear']复选框。但是它不起作用。若我勾选复选框并选择“新建图像”,则表单无效。但若我仅选择“新建图像”(不勾选复选框),则表单有效 我一直在寻找什么问题,但我没有找到。你能帮助我吗?对不起我的英语 forms.py class AddIdeaFrom(forms.ModelForm): class Meta: model = Idea fields = ['title'
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
{%csrf_令牌%}
正文
{{form.description}}
选择图像
{{form.image}
添加
从您的评论中可以看出,您的表单中存在矛盾数据的问题。这可能是因为在FileField
widget中使用了“清除”复选框。在您的表单中尝试此操作。py
:
image = forms.FileField(widget=FileInput, required=False)
这将从表单中删除“清除”复选框。
或者,如果您不想让用户清除图像,您可以在验证之前在视图中取消选中它。您可以编辑验证中出现错误的帖子吗?试着这样做:print(edit_idea.errors)我尝试在我的模板中使用{{form.errors}},但是什么都没有发生。。。它的工作原理是:“请上传文件或勾选“清除”复选框,但不要同时执行这两项操作。”现在一切都已清除,谢谢,所以看起来您选择了imaged并同时选中了Clear复选框。您可以通过打印(编辑)检查表单中的所有值。在开发服务器的控制台中检查它。这要容易得多。您应该看到表单中的所有输入值。如果你愿意,你可以把它贴在这里
image = forms.FileField(widget=FileInput, required=False)