繁体   English   中英

Django模型编辑表单未显示上传的文件并删除选项

[英]Django model edit form not showing up uploaded file and remove option

我有一个带有上载字段的模型表格,

我的表格

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)

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

它为您处理所有必要的表单实例化,因此您无需在getpost函数中创建,填充和验证。 当然,这将使您更轻松地处理用例。

对于您的问题,您可能忘记了在get函数的表单实例化中设置files参数。 请查看Django文档中的内容: 文件上传

您可以尝试在get函数中使用下面的行吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM