Python 在会话变量中存储queryset

Python 在会话变量中存储queryset,python,django,web,Python,Django,Web,我正在使用django并试图将queryset存储在会话变量中 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()

我正在使用django并试图将queryset存储在会话变量中

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)
我得到以下错误: “QuerySet”对象没有属性“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)

有没有办法在会话变量中存储queryset?

您不能在Django会话中直接保存queryset,您需要先序列化它,然后才能在会话中保存它

让我知道它是否与你合作 为非JSON可序列化错误干杯,您可以使用django序列化程序序列化模型,如下所示:

from django.core import serializers

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

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

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

因为如果你想存储这些值,你能做的就是

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
values函数将为您提供一个所有项目的列表,其中包含字典中每列的值

因此,基本上您将得到一个包含queryset值的字典列表


希望有帮助。

代码本身不会给出错误。请显示视图的其余部分(正确缩进)和完整的traceback.city_list_for_session=json.dumpscity_list.values这会产生以下错误:[]不是json序列化的你可以发布模型酒店的模型结构吗?在原始问题中添加了它你的ImageField不是json序列化的。因此,您将无法存储图像。另外,我不建议您存储从过滤器获得的所有图像。相反,您可以做的不是将ImageField放入序列化数据中。谢谢您的帮助