我列出了所有规格的产品。 所以现在我想发送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对象
答案 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_framework或tastypie来获得更好的解决方案。
答案 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}]