在完成整个过程之前,使用FormWizard并保存表单数据? [英] Using FormWizard and saving the forms data in between before the completion of the whole process?

查看:121
本文介绍了在完成整个过程之前,使用FormWizard并保存表单数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



现在我正在使用FormWizard创建一组表单,我只是想知道。如果用户开始输入表单中的数据,并填写最多2个表单,然后填写剩下的表单。这样可能的是,他填写的两种形式的数据可以保存在数据库中。
下一次他可以完成第三个表单的操作。



如果有人知道那么然后plz帮助我,这将是一个很大的帮助。谢谢!

解决方案

你可以做的是每一步,将表单状态保存到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])< - 类名称,而不是实例名称

def formwizard_proxy(request,step):
如果没有request.POST:#if首次访问,获取存储数据
try:
prev_data = SavedForm.objects.get(user = request.user)
request.POST = pickle.loads(prev_data.postdata)
除了:
pass

否则:否则保存statet:
try:
data = SavedForm.objects.get(user = request.user)
除了:
data = SavedForm(user = request.user)
data.postdata = pickle.dumps(request.POST )
data.save()

return formwizard(request)

编辑:更改formwizard构造函数


I am using FormWizard to complete a set of operation in my app, I have two models Employee and Person, Employee class inherits Person, and all the fields of Person are available for Employee object.

Now I am creating a set of forms using FormWizard, I just wanted to know that. If a user starts entering the data in the forms and fills upto 2 forms out of 4 and is willing to fill the rest of the forms afterwards. So is this possible that the data for the two forms which he filled can be saved in the database. And the next time he comes can complete the operation form the 3rd form.

If anyone knows that then plz help me out, it would be a great help. Thank You!

解决方案

what you can do is every step, save out the form state to some serialised object in db ForeignKeyed to the user.

then when hooking up the formwizard, wrap the formwizard view in a custom view which checks if the user has a saved form and if so deserialises and redirects to the appropriate step.

Edit: seems formwizard saves state in POST. only need to save 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)

edit: changed formwizard constructor

这篇关于在完成整个过程之前,使用FormWizard并保存表单数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆