<object>不是JSON可序列化的django

时间:2016-12-13 08:46:47

标签: 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=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对象

3 个答案:

答案 0 :(得分:2)

您必须创建一个serializer来序列化模型对象 JSON然后返回响应。例如,如果您使用Django Rest Framework,则可以创建文件 serialzers.py

from models import Products
from rest_framework import serializers


class ProductsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Products

然后在 views.py 中,您必须将其称为:

from serializers import ProductsSerializer

all_pro = Products.objects.all()
data = ProductsSerializer(all_pro).data  # serialize the data
return HttpResponse(data)

答案 1 :(得分:2)

您可以使用核心软件包中的django序列化程序,

from django.core import serializers
all_pro = Products.objects.all()
data = serializers.serialize('json', all_pro, fields=('product_name','category', ))
return HttpResponse(data)

但我建议使用rest_frameworktastypie来获得更好的解决方案。

答案 2 :(得分:1)

所有上述方法都很好。但我更喜欢

data = Products.objects.all().values('product_name', 'category', 'price')
return JsonResponse(list(all_pro ))

JsonResponse可以从

导入

from django.http import JsonResponse

这也可以确保您的查询仅从数据库中提取必填字段。

示例回复:

[{'product_name':'Data1', 'category':'cat1', 'price':10},{'product_name':'Data2', 'category':'cat2', 'price':5}]