Django FormPreview:将表单数据保存到数据库

时间:2017-03-09 00:57:26

标签: python django

可能是一个简单的问题,但在使用django-formtools实现表单预览页面时遇到了问题。我按照文档配置了所有内容。我坚持要添加到done()方法以将数据保存到db。

forms.py

class JobForm(ModelForm):
    class Meta:
        model = Job
        fields = ('title', 'category', 'company', 'website',    'description',)

class JobFormPreview(FormPreview):
    def done(self, request, cleaned_data):
        # add what here to save form data as object?
        return HttpResponseRedirect('/success')

urls.py

...
url(r'^jobs/new/$',
    JobFormPreview(JobForm),
    name='job_form'),
...

使用默认模板。表单和预览都渲染得很好,但显然数据不会保存在提交上。每this answer次尝试self.form.save(),但收到错误save() missing 1 required positional argument: 'self'

我感谢任何指导。

1 个答案:

答案 0 :(得分:1)

查看formtools code,看起来好像self.form是表单类,而不是经过验证的表单实例。因此self.form.save()无效。我已删除了从linked answer致电self.form.save()的建议。

我无法通过done方法直接访问经过验证的表单。我建议您使用cleaned_data来创建实例:

class JobFormPreview(FormPreview):
    def done(self, request, cleaned_data):
        job = Job.objects.create(**cleaned_data)
        return HttpResponseRedirect('/success')