3

部分的に完成したフォームセットを保存するための単純な「チェックポイント」システムを実装しようとしています。データ入力プロジェクト用の大きなフォーム (たとえば 100 エントリ) のセットがあります。さて、その人が途中でやめたり、途中で何かをしたりした場合、この進行状況を保存したいと思いますが、半分入力されたデータは、完了するまでデータベースに保存したくありません。

私が知る限り、これに対処する最善の方法は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とpickleを試してみましたが、同じエラーが発生しました。これを回避する方法はありますか?

4

1 に答える 1

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)
于 2013-04-29T05:15:50.327 に答える