为了账号安全,请及时绑定邮箱和手机立即绑定

未以 Django 形式上传的文件 - 编码类型不正确

未以 Django 形式上传的文件 - 编码类型不正确

慕码人8056858 2022-11-01 14:31:35
我们在我们的网站中使用带有 Crispy 表单的 Django。我有一个由{% crispy form %}. 这是表单的代码:class ProfileForm(AddAttributesToFieldsMixin, CleanDateOfBirthMixin, LocalizedFirstLastNameMixin, forms.ModelForm):    profile_picture = forms.ImageField(required=False, widget=CustomPhotoWidget, label=_('Update your profile picture'), error_messages={'required': _("A profile picture is required.")})    class Meta:        model = User        fields = ('slug', 'gender', 'date_of_birth', 'profile_picture')使用的表单CustomPhotoWidget定义如下:class CustomPhotoWidget(forms.widgets.Widget):    def render(self, name, value, attrs=None, renderer=None):        return render_to_string(template_name='accounts/edit_profile/widgets/photo_widget.html', context={            'name': name,            'user_photo': self.attrs['user'].photo,        })但问题是,当我从浏览器上传文件时,我收到一条错误消息“没有提交文件。请检查表单上的编码类型。” 并且该文件未保存。表单的编码类型不正确。如何使用 Crispy 表单更改编码类型?
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我在 GitHub 上提交了一个问题,并向与我一起工作的开发人员Aaron Chong寻求帮助。他检查并发现了问题。CustomPhotoWidget应该这样定义:

class CustomPhotoWidget(forms.widgets.Widget):

    needs_multipart_form = True


    def render(self, name, value, attrs=None, renderer=None):

        return render_to_string(template_name='accounts/edit_profile/widgets/photo_widget.html', context={

            'name': name,

            'user_photo': self.attrs['user'].photo,

        })

needs_multipart_form = True是修复表单的编码类型所需要的。我正在将此解决方案上传到 Stack Overflow,因为我没有needs_multipart_form在网站上的其他问题中找到文档。


查看完整回答
反对 回复 2022-11-01
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信