Django模型编辑表单没有显示上传文件和删除选项

时间:2016-10-21 13:21:54

标签: python django

我有一个带上传字段的模型表单

我的表单

class AccountEditForm(forms.ModelForm):
    telephone = forms.CharField(label=_('Telephone'), required=False,widget=forms.TextInput({'class': 'input-text input-box'}))
    cv = forms.FileField(required=True,widget=forms.FileInput({'class': 'input-text input-box'}))
    class Meta:
        model = Profile
        fields = ('telephone','cv')

我的观点

class AccountEdit(TemplateView):
    template_name = 'base/account/edit.html'
    def get(self,request,*args,**kwargs):
        profile = request.user.profile
        data = {
            'form': AccountEditForm(instance=profile)
        }
        return render(request,self.template_name,data)
    def post(self,request,*args,**kwargs):
        profile = request.user.profile
        form = AccountEditForm(request.POST,request.FILES,instance=profile)
        if form.is_valid():
            form.save()
            messages.success(request, _('Successfully updated your account.'))
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        data = {
            'form': form
        }
        return render(request,self.template_name,data)

我的模板

<div class="form-group">
    {{ form.telephone.label }}
    {{ form.telephone }}
    {% if form.telephone.errors %}
        {{ form.telephone.as_text }}
    {% endif %}
</div>
<div class="form-group">
    {{ form.cv.label }}
    {{ form.cv }}
    {% if form.cv.errors %}
        {{ form.cv.errors.as_text }}
    {% endif %}
</div>

问题出现在编辑表单中,如果我更改了其他字段而没有显示上传文件并提交,则表示错误需要cv

答案

现在确定为什么但这有效,可以让任何人理解这个

cv = forms.FileField(required=True)

1 个答案:

答案 0 :(得分:0)

您是否考虑在视图中扩展FormView而不是TemplateView

它会为您处理所有必要的表单实例化,因此您无需在getpost函数中创建,填充和验证。这肯定会让你更容易处理你的用例。

至于您的问题,您可能忘记在files函数中的表单实例化中设置get参数。请从Django文档中查看:File Upload

您可以尝试使用get功能中的以下行吗?

data = {
    'form': AccountEditForm(instance=profile, files=request.FILES)
}