2013-04-29 26 views
2

我试图实现一个简单的“检查点”系统来保存部分完成的表单。对于数据录入项目,我有一套大型表单(比如说100个条目)。现在,如果这个人退出或者中途退出,那么我希望保存这个进程 - 但是我不希望半数输入的数据保存在数据库中,直到完成。如何将request.POST序列化到数据库并再次返回

据我所见,处理这个问题的最佳方法是将request.POST保存到数据库字段并再次将其拉出,例如,

def myview(request, obj_id): 
    obj = get_object_or_404(Task, obj_id) 
    if request.POST: 
     # save checkpoint 
     obj.checkpoint = serializers.serialize("json", request.POST) 
    else: 
     # load last version from database. 
     request.POST = serializers.deserialize("json", obj.checkpoint) 
    formset = MyFormSet(request.POST) 
    # etc. 

但是,这给了我以下错误:

'unicode' object has no attribute '_meta' 

我试过简单的JSON和泡菜,并得到了同样的错误。有没有办法解决?

回答

2

Django的序列化器接口与django模型对象一起工作。它不会与其他对象一起工作。

您可以尝试使用json

if request.POST: 
    # save checkpoint 
    obj.checkpoint = json.dumps(request.POST) 
    post_data = request.POST 
else: 
    # load last version from database. 
    post_data = json.loads(obj.checkpoint) 

formset = MyFormSet(post_data) 
+0

不工作 - 我得到以下错误:AttributeError的: '快译通' 对象有没有属性 '的GetList' – Puzzled79 2013-04-29 10:02:40

+0

@ Simon7,Django的request.POST'是不是一个简单的字典,而是一个'QueryDict'。所以在使用保存的数据时可能会产生错误。从字典创建querydict参考http://stackoverflow.com/questions/13363628/django-can-i-create-a-querydict-from-a-dictionary – Rohan 2013-04-29 11:40:56

+0

好吧,似乎工作 - 感谢罗汉 – Puzzled79 2013-04-30 06:16:52

相关问题