建立一个与Model对应的serilalizer类
可以自己设置需要序列化的字段
serializers.py
from rest_framework import serializers
from .models import Goods
class GoodsSerializer(serializers.Serializer):
name = serializers.CharField(max_length=100, read_only=True)
goods_front_image = serializers.IntegerField()
如form有ModelForm,serializers也有Modelserializer
通过model 与 fields 序列化指定内容
class GoodsSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length=100, read_only=True)
goods_front_image = serializers.IntegerField()
class Meta:
model = Goods
fields = "__all__"
# 序列化部分字段
# fields = ('name', 'goods_num', 'market_price')
Serializer可以进行嵌套,在goods表中category字段设置外健为GoodsCategory。默认序列化输出后category显示为GoodsCategory的id,我们可以将相应的GoodsCategory的详细内容嵌套进去。
class GoodsCategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__"
class GoodsSerializer(serializers.ModelSerializer):
category = GoodsCategorySerializer()
goods_front_image = serializers.IntegerField()
class Meta:
model = Goods
fields = "__all__"
views中使用Serializer
对应的List类继承框架中的APIView,重写get方法。
调用之前写好的GoodsSerializer对查询后的结果序列化,当内容为多个时需设置many=True。
返回序列结果的data参数。
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Goods
from .serializers import GoodsSerializer
class GoodsList(APIView):
"""
商品列表
"""
def get(self, request):
goods = Goods.objects.all()[:10]
goods_list = GoodsSerializer(goods, many=True)
return Response(goods_list.data)