Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python <;对象>;JSON不是可序列化的django吗_Python_Json_Django - Fatal编程技术网

Python <;对象>;JSON不是可序列化的django吗

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

我有一份所有规格的产品清单。 现在我想发送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=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}]