将queryset存储在会话变量中

时间:2017-01-18 09:54:25

标签: python django web

我正在使用django并尝试将查询集存储在会话变量

def wholelist(request):
    hotelvar=request.POST.get('service_type')


    city_list=Hotels.objects.filter(city_name__iexact=request.POST.get('searchabc'))
    if not city_list:
        hotel_list=Hotels.objects.all()
        context={'hotel_list':hotel_list}
        return render(request, 'polls/homepage.html',context)

    pricemin=200
    pricemax=800
    request.session['hlist']=city_list

我收到以下错误: [酒店:ashoka,酒店:abc]不是JSON可序列化的

我尝试转换为列表然后存储

request.session['hlist']=list(city_list)

我收到以下错误: '查询集'对象没有属性' POST'

这是酒店的模型结构

class Hotels(models.Model):
    def __str__(self):
        return self.hotel_name
    hotel_name=models.CharField(max_length=200)
    photo=models.ImageField()
    city_name=models.CharField(max_length=200)

有没有办法在会话变量中存储查询集?

3 个答案:

答案 0 :(得分:0)

对于is not JSON serializable错误,您可以使用django serializers序列化模型,如下所示:

from django.core import serializers

hotel_list=Hotels.objects.all()
json_hotel = serializers.serialize('json', hotel_list)
context={'hotel_list':json_hotel}

答案 1 :(得分:0)

我对您的问题的理解是,您希望将查询集中返回的所有值存储在请求的会话变量中。

但是你不能这样做,因为那些查询集只不过是对对象的引用。

如果您想存储值,您可以做的是

goo

函数import json def wholelist(request): hotelvar=request.POST.get('service_type') city_list=Hotels.objects.filter(city_name__iexact=request.POST.get('searchabc')) if not city_list: hotel_list=Hotels.objects.all() context={'hotel_list':hotel_list} return render(request, 'polls/homepage.html',context) pricemin=200 pricemax=800 city_list2 = [] city_list_for_session = city_list.values()#this will store the values of querylist to the session for item in city_list_for_session: data = { 'hotel':item['hotel'], 'city_name':item['city_name']} city_list2.append(data) request.session['hlist']=city_list2 将为您提供所有项目的列表,其中包含字典中每列的值。

所以基本上你将得到的是一个包含queryset值的字典列表。

希望它有所帮助。

答案 2 :(得分:-1)

您无法在Django会话中直接保存QuerySet,您需要先将其序列化,然后才能将其保存在会话中。

让我知道它是否与您合作 干杯