2017-02-05 5 views
0

私はDjangoモデルオブジェクトをリストに入れてセッションに保存する方法を探しています。私はそれがセッションに格納される前にそれがシリアル化を必要とすることを知りました。だからセッションからリストを読むときは、まずそれをシリアル化します。セッションとの間でDjangoモデルオブジェクトのPythonリストを保存したり読む方法はありますか?

しかし私は以前のように私の最初のオブジェクトにアクセスできることを期待していましたが、DeserializedObjectであることが判明しました。

私の要件にどのようにアプローチすればよいと思いますか?この一言で言えば は私がしようとしていたコードであり、まだ失敗し

team1_list = generate_random_playerlist() #generates a list of Player() objects 
request.session['proposed_team_1'] = serializers.serialize('json', team1_list) 

#some code inbetween 

des_list = serializers.deserialize('json', request.session['proposed_team_1']) 
for player in des_list : 
    print("name of player:"+player.last_name) #fails 

答えて

1

私はモデルインスタンス自身をシリアル化しません。セッションにプライマリキーを書くだけで簡単ですし、シリアライズも必要ありません。その後、クエリーセットを単一のクエリーでデータベースから取り出すことができ、変更されたデータやインスタンスが見つからないなどの心配もありません。

request.session['player_ids'] = list(players.values_list('pk', flat=True)) 

players = Player.objects.filter(pk__in=request.session.get('player_ids', [])) 

あなたPlayerインスタンスがまだデータベースに保存されていない場合、あなたはあなたの道を行かなければならないかもしれません。次にDeserializedObjectから.object属性を介して実際のモデルインスタンスを取得します。

for player in des_list : 
    print("name of player:" + player.object.last_name) 

デシリアライズについてはdocsを参照してください。

+0

ありがとうございます、あなたの入力は有用であり、私は実際にそのように行くかもしれません。この段階で私は実際にこれらのリストをデータベースに格納するつもりは実際にはありませんでした。私は.objectを追加しようとしました。どうもありがとうございました ! –

関連する問題