我正在使用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构造函数