我正在使用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)
有没有办法在会话变量中存储查询集?
答案 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,您需要先将其序列化,然后才能将其保存在会话中。
让我知道它是否与您合作 干杯