2016-12-07 2 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

아주 좋은 이유는 아닌 것 같습니다. 이렇게하면 새 항목이 추가 될 때 절대로 업데이트되지 않습니다. 쿼리 세트는 모든 단일 사용자에 대해 개별적으로 저장됩니다. 쿼리를 공유해야하는 경우 각 뷰 또는 컨텍스트 프로세서에서 호출하는 공통 함수를 사용하십시오. –

답변

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} 

같은 아래에 뭔가를 있다고 가정 db 쿼리에서 나오는 객체는 json serializable이 아닙니다. 위의 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'))가 작동하지 않습니다. ' –

관련 문제