2016-12-07 4 views
0

Я пытаюсь передать объекты базы данных с одного вида на другой. Но когда я пытаюсь добиться этого с помощью СЕССИИ, я получаю это «не является JSON-сериализуемым».Тип Ошибка: не JSON serializable

Моего 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 является то, как показано ниже (псевдокод)

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')) не работает ' –

Смежные вопросы