Python Django表单在我尝试更新图像时无效

Python 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'

我使用此表单添加和更新帖子。当我想编辑帖子和更新图片时,如果帖子有图片,Django会添加['image-clear']复选框。但是它不起作用。若我勾选复选框并选择“新建图像”,则表单无效。但若我仅选择“新建图像”(不勾选复选框),则表单有效

我一直在寻找什么问题,但我没有找到。你能帮助我吗?对不起我的英语

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


{%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)