【问题标题】:How to save submitted form image field before clean method in Form Wizard (Django 1.2)如何在表单向导(Django 1.2)中的清理方法之前保存提交的表单图像字段
【发布时间】:2025-12-31 21:40:02
【问题描述】:

表单向导中提交表单时,图像字段出现“此字段为必填项”错误。

class SignupForm(forms.ModelForm):
    username = forms.CharField(
        label = _("Username*"),
        max_length = 30,
        widget = forms.TextInput()
    )
    image = forms.ImageField(label = _("Profile picture*"), required=True)
class Meta:
    model = Profile
    fields = ('name','gender','birth_date',)

这是我在表单向导中的最后一个表单。在提交此表单时,我以干净的方法获得了用户名和其他字段,但没有图像。有没有办法在验证此表单之前保存图像以避免“此字段为必填项”错误?

【问题讨论】:

  • 您的意思是,您想从验证中排除“图像”字段?
  • 我想验证它,但在提交表单时此字段为空,尽管上传的文件存在于 request.FILES 中。同样在此表单图像字段的“clean”方法中的“self.data”中也不存在。 @Paulo 你能告诉我在表单向导中验证之前提交表单的方法吗?
  • 在 request.FILES ]}>。但在 request.POST 中“图像”字段不存在。我想做类似的事情:“SignupForm(request.POST, request.FILES)”,这样我就可以手动验证图像字段。
  • 所以我对此进行了更多阅读,发现你不能使用文件(图像)的原因是因为它不受支持,所以我给你的解决方案是阅读这个@987654321 @ 并编辑 django.contrib.formtools 应用程序,或者只是在项目中复制并粘贴 formtools 并将导入更改为 yourproject.formtools ,只需应用链接中提供的补丁,它应该可以正常工作

标签: django django-formwizard


【解决方案1】:

要通过表单向导上传图像,您应该更改文件“django/contrib/formtools/wizard.py”。这张票code.djangoproject.com/ticket/7439 中提到了这些更改。如果您不想更改 djnago 代码,只需将“formtools”文件夹复制到您的应用程序中,然后在那里进行更改,而不是使用:

from django.contrib.formtools.wizard import FormWizard

使用:

from formtools.wizard import FormWizard

同时设置模板表单的 enctype="multipart/form-data"。

【讨论】:

    最近更新 更多