2016-12-07 11 views
0

データベースオブジェクトをあるビューから別のビューに渡そうとしています。しかし、セッションを使用してこれを達成しようとすると、この "はJSONシリアル化可能ではありません"というエラーが発生しています。タイプエラー:JSONシリアライズ可能ではありません

マイViews.py

def index(request): 
    listset = TheaterBase.objects.all() 
    request.session['s_listset'] = listset 

def otherview(request): 
    result = request.session.get('s_listset') 

ビュー間でデータベースオブジェクトを渡す方法は?

事前

+0

を使用して試すことができますか?他のビューでクエリを実行できないのはなぜですか? –

+0

私はすべてのビューで同じクエリを使用する必要があります 私はそれがサーバーの負荷を軽減するように、セッションでそれらを格納する必要があります。 @DanielRoseman –

+0

それは非常に良い理由ではないようです。これを行うと、新しい項目が追加されたときに更新されません。クエリーセットは1人のユーザーごとに個別に保存されます。クエリを共有する必要がある場合は、各ビューまたはコンテキストプロセッサから呼び出される共通の関数を使用します。 –

答えて

0

に感謝はちょうどあなたにその後、あなたのTheaterBaseクラスは以下のようなもの(擬似コード)

class TheaterBase: 
    field1 ... 
    fielld2 ... 
------- 
# a method to produce json serializable representation 
def as_dict(self): 
    return {'field1': self.field1, 'fileld2': self.fielld2} 

であると仮定しようが、ここで

listset = [x.as_dict() for x in TheaterBase.objects.all()] 

に問題を行うことで表示しますあなたのdbクエリから出てくるオブジェクトはjsonシリアライザブルではありません。上のas_dictメソッドは、そのオブジェクトのjsonシリアライズ可能表現を構築しています。

1

サーバーセッションはJSONオブジェクトのみを格納できます。複雑なDjango QuerySetオブジェクトを格納しようとしていますが、これは当然JSONシリアライズ可能ではありません。

私を信頼してください、たとえそうだったとしても、あなたはこれをしたくありません。大量のデータを使用してサーバーのセッションを悪用することは賢明ではありません。

0

あなたがしたいのはなぜジャンゴシリアライザ

from django.core import serializers 
listset = serializers.serialize("json", TheaterBase.objects.all()) 
+0

ありがとう、 'listset = serializers.serialize(" json "、TheaterBase.objects.all()。values_list( 'field'))は動作していません ' –

関連する問題