drf嵌套序列化返回


class Books(View):

    def get(self,request):
        # 1、查询所有图书对象
        books = BookInfo.objects.all()

        ser= BookSerialzier(books,many=True)

        return JsonResponse(ser.data, safe=False)

    def post(self, request):
        # 1、获取前端数据
        data = request.body.decode()
        data_dict = json.loads(data)
        # 2、验证数据
        ser= BookSerialzier(data=data_dict)
        ser.is_valid() # 验证方法

        # 3、保存数据
        ser.save()
        # 4、返回结果
        return JsonResponse(ser.data)


class HeroInfoSerialzier(serializers.Serializer):
    # 英雄序列化器
    hname = serializers.CharField()
    hcomment = serializers.CharField()
    # hbook=serializers.PrimaryKeyRelatedField()
    hbook = serializers.StringRelatedField()


# 自定义序列化器
class BookSerialzier(serializers.Serializer):
    # 序列化返回字段
    btitle = serializers.CharField(max_length=20, min_length=5, write_only=True)
    bread = serializers.IntegerField(max_value=100, min_value=5)
    bpub_date = serializers.DateField()
    bcomment = serializers.IntegerField(default=10)

    # 返回关联的英雄id   PrimaryKeyRelatedField
    # heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True,many=True)
    # 返回关联英雄模型类的str方法值
    # heroinfo_set = serializers.StringRelatedField(read_only=True, many=True)

    #第3种方式 通过引用上面的 HeroInfoSerialzier类
    heroinfo_set = HeroInfoSerialzier(many=True)