Python <;对象>;JSON不是可序列化的django吗
我有一份所有规格的产品清单。 现在我想发送JsonResponse,该列表一次分页10个产品。 当我尝试发送所有产品时Python <;对象>;JSON不是可序列化的django吗,python,json,django,Python,Json,Django,我有一份所有规格的产品清单。 现在我想发送JsonResponse,该列表一次分页10个产品。 当我尝试发送所有产品时 all_pro = Products.objects.all() return HttpResponse(all_pro ) 它给了我一个错误:JSON不可序列化 我的产品模型 class Products(models.Model): product_name = models.CharField(max_length=50,null=True, blank=Tru
all_pro = Products.objects.all()
return HttpResponse(all_pro )
它给了我一个错误:JSON不可序列化
我的产品模型
class Products(models.Model):
product_name = models.CharField(max_length=50,null=True, blank=True)
category = models.CharField(max_length=100, null=True, blank=True)
price = models.IntegerField(default=0,null=True, blank=True)
posting_date = models.DateTimeField(auto_now_add=True, blank=True)
quantity = models.IntegerField(default=1,null=True, blank=True)
extra_text = models.TextField(null=True, blank=True)
color = models.CharField(max_length=50,null=True, blank=True)
contact_number = models.CharField(max_length=50,null=True, blank=True)
is_active = models.BooleanField(default=True)
那么,如何将JsonResponse发送到前端呢。
提前谢谢。
我没有使用drf
我想发送Json对象您必须创建一个
然后返回响应。例如,如果正在使用,则可以创建文件serializers.py,如下所示:
然后在your views.py中,您必须将其称为:
from serializers import ProductsSerializer
all_pro = Products.objects.all()
data = ProductsSerializer(all_pro).data # serialize the data
return HttpResponse(data)
您可以使用核心包中的django序列化程序
from django.core import serializers
all_pro = Products.objects.all()
data = serializers.serialize('json', all_pro, fields=('product_name','category', ))
return HttpResponse(data)
但我建议使用或获得更好的解决方案。上述所有方法都很好。但我更喜欢
all_pro = Products.objects.all().values('product_name', 'category', 'price')
return JsonResponse(list(all_pro))
JsonResponse可以从导入
从django.http导入JsonResponse
这也确保您的查询只从数据库中获取必需的字段
样本响应:
[{'product_name':'Data1', 'category':'cat1', 'price':10},{'product_name':'Data2', 'category':'cat2', 'price':5}]
您不能简单地将
QuerySet
交给HttpResponse()
。您必须将这些对象序列化为一个简单的Python结构,如字典。我认为代码不会产生该错误。你能发布你的实际代码吗。另外,如果您正在使用DRF,请告诉我们您是否正在使用DRF。我没有使用DRF。这假设他们正在使用DRF,但问题中没有这方面的证据。我没有使用DRF。这并不能解决我的问题。@vikrantVerma:此解决方案假设您正在使用DRF。既然你不是DRF,就用sideeffect提到的另一个答案
[{'product_name':'Data1', 'category':'cat1', 'price':10},{'product_name':'Data2', 'category':'cat2', 'price':5}]