我正在使用FormWizard在我的应用程序中完成一组操作,我有两个模型Employee和Person,Employee类继承Person,并且Person的所有字段都可用于Employee对象。

现在,我正在使用FormWizard创建一组表单,我只是想知道这一点。如果用户开始在表单中输入数据并最多填写4个表单中的2个,并且随后愿意填写其余表单。这样就可以将他填写的两种表格的数据保存在数据库中。
而下次他来可以完成第三次表格的操作。

如果有人知道,那么请帮助我,那将是很大的帮助。谢谢!

最佳答案

您可以做的是每一步,将表单状态保存到db ForeignKeyed中的某个序列化对象中,以供用户使用。

然后在挂接formwizard时,将formwizard视图包装在自定义视图中,该视图将检查用户是否具有已保存的表单,如果存在,则反序列化并重定向到相应的步骤。

编辑:似乎formwizard将状态保存在POST中。只需要保存postdata。

models.py:

class SavedForm(Model):
    user = ForeignKey(User)
    postdata = TextField()


views.py:

import pickle
class MyWizard(FormWizard):
    def done(self, request, form_list):
        SavedForm.objects.get(user=request.user).delete() # clear state!!
        return render_to_response('done.html',)

formwizard = MyWizard([Form1, Form2]) <- class name, not instance name

def formwizard_proxy(request, step):
    if not request.POST: #if first visit, get stored data
        try:
            prev_data = SavedForm.objects.get(user=request.user)
            request.POST = pickle.loads(prev_data.postdata)
        except:
            pass

    else: # otherwise save statet:
        try:
            data = SavedForm.objects.get(user=request.user)
        except:
            data = SavedForm(user=request.user)
        data.postdata=pickle.dumps(request.POST)
        data.save()

    return formwizard(request)


编辑:更改了formwizard构造函数

07-28 09:29