1. 序列化器:
from rest_framework import serializers
from .models import BookInfo, HeroInfo
class BookInfoSerializer(serializers.ModelSerializer):
"""图书序列化器"""
class Meta:
model = BookInfo
fields = "__all__" # 映射模型类中存在的所有字段
class HeroInfoSerializer(serializers.ModelSerializer):
"""英雄序列化器"""
# 支持序列化和反序列化, queryset参数这里需要注意:字段代表谁就指定谁的查询集hbook代表BookInfo,所以就指定BookInfo的查询集
# hbook = BookInfoSerializer(queryset = BookInfo.objects.all())
# 只支持序列化,不支持反序列化
hbook = BookInfoSerializer(read_only=True)
class Meta:
model = HeroInfo
fields = "__all__"
def create(self, validated_data):
# 因为视图类继承的GenericAPIView不是APIView,所以会默认传递context参数给序列化器对象
# self.context是个字典,里面传递过来了三个键值对request, format, view
# request.data就可以拿到前端传递过来的数据,request.data也是一个字典
hbook_id = self.context["request"].data["hbook"]
print(type(hbook_id), hbook_id)
hero = HeroInfo()
hero.hname = validated_data["hname"]
hero.hcommon = validated_data["hcommon"]
hero.hbook_id = hbook_id
hero.save()
return hero
2. 视图类
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
from .models import BookInfo, HeroInfo
from .serializers import BookInfoSerializer, HeroInfoSerializer
class GBookListAPIView(ListCreateAPIView):
"""列表视图"""
# 指定查询集、序列化器类
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
class GBookDetailAPIView(RetrieveUpdateDestroyAPIView):
"""详情视图"""
# 指定查询集和序列化器
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
class GHeroListAPIView(ListCreateAPIView):
queryset = HeroInfo.objects.all()
serializer_class = HeroInfoSerializer
class GHeroDetailAPIView(RetrieveUpdateDestroyAPIView):
queryset = HeroInfo.objects.all()
serializer_class = HeroInfoSerializer