2016-12-07 53 views
0

我試圖將數據庫對象從一個視圖傳遞到另一個視圖。但是當我嘗試使用SESSION來實現這一點時,我得到這個「不是JSON serializiable」的錯誤。類型錯誤:不是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

這似乎不是一個很好的理由。如果你這樣做,它將永遠不會更新添加新項目;並且查詢集將爲每個單獨的用戶單獨存儲。如果您需要共享查詢,請使用每個視圖調用的通用函數或上下文處理器。 –

回答

0

我們只是假設您TheaterBase類是類似下面的東西對你查看做

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

這裏的問題是(僞代碼)

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

然後來自你的數據庫查詢的對象不是json可串行化的。上面的as_dict方法構造了該對象的一個​​json可序列化表示。

1

服務器會話只能存儲JSON對象。您正在嘗試存儲複雜的Django QuerySet對象,該對象自然不是JSON可序列化的。

相信我,即使是這樣,你也不想這樣做。用大量數據濫用服務器會話是不健康的。

0

您可以嘗試使用Django串行

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

謝謝但'listset = serializers.serialize(「json」,TheaterBase.objects.all()。values_list('field'))不起作用 ' –