当我尝试更新Image时,Django表单无效

时间:2017-04-15 13:58:32

标签: python django forms image validation

我使用此表单添加和更新帖子。当我想编辑帖子和更新图片时,如果帖子有图像,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>

1 个答案:

答案 0 :(得分:0)

从您的评论中看,您的表单中存在相互矛盾的数据存在问题。这可能是因为使用&#34; Clear&#34;带有FileField小部件的复选框。在forms.py

中试试这个
image = forms.FileField(widget=FileInput, required=False)

这应该删除&#34;清除&#34;表单中的复选框。 或者,如果您不想让用户清除图像,您可以在验证前在视图中取消选择它。