Django Cart类型的对象不可JSON序列化
我有一个产品模型和一个购物车模型。我在购物车模型中加入了很多关系。 我试图返回cart模型的对象以及上下文字典,但它给出了一个错误“cart类型的对象不可JSON序列化”。 我使用的是Django版本“3.0.7” 我正在关注贾斯汀·迈克尔的教程,他正在使用较低的Django版本,并且正在进行这方面的工作。 Django改变了这件事吗Django Cart类型的对象不可JSON序列化,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我有一个产品模型和一个购物车模型。我在购物车模型中加入了很多关系。 我试图返回cart模型的对象以及上下文字典,但它给出了一个错误“cart类型的对象不可JSON序列化”。 我使用的是Django版本“3.0.7” 我正在关注贾斯汀·迈克尔的教程,他正在使用较低的Django版本,并且正在进行这方面的工作。 Django改变了这件事吗 class CartManager(models.Manager): def new_or_get(self,request): cart
class CartManager(models.Manager):
def new_or_get(self,request):
cart_id = request.session.get('cart_id')
qs = self.get_queryset().filter(id = cart_id)
if qs.count() == 1:
new_obj = False
cart_obj = qs.first()
if request.user.is_authenticated and cart_obj.user is None:
cart_obj.user = request.user
cart_obj.save()
else:
cart_obj = Cart.objects.new_cart(user = request.user)
new_obj = True
request.session['cart_id'] = cart_obj
return cart_obj,new_obj
def new_cart(self,user=None):
user_obj = None
if user is not None:
if user.is_authenticated:
user_obj = user
return self.model.objects.create(user=user_obj)
模型实际上是:
class Cart(models.Model):
user = models.ForeignKey(User,on_delete = models.CASCADE,null=True,blank=True)
products = models.ManyToManyField(Product,blank=True)
#more fields
而views.py是:
def cart_home(request):
cart_obj,new_obj = Cart.objects.new_or_get(request)
context={'cart':cart_obj}
return render(request,'carts/cart_home.html',context)
不能将Python类实例(例如模型类实例)作为渲染数据发送,必须发送类似json的对象(Python中的dict) 因此,您需要将
cart_obj
转换为dict,这样就可以通过render
将其发送到前端。使用Django最简单的方法是使用(在您的情况下,最好的选择是ModelSerializer
)
很抱歉打扰你们,我犯了一个愚蠢的错误:
request.session['cart_id'] = cart_obj
我试图将cart对象分配给会话变量,这是一个输入错误,实际上我应该这样做:
request.session['cart_id'] = cart_obj.id
Credits:minglyu
请求。session
只能存储简单的数据结构,如list、dict,不能用于存储模型实例对象。将您的代码更改为request.session['cart\u id']=cart\u obj.id
,下次您通过cart.objects.get(id=request.session['cart\u id'])
获取cart\u obj.id时,我会将以前的代码与新代码进行比较,并在明天更新
request.session['cart_id'] = cart_obj.id