序列化书籍的时候,输出关联的英雄信息(many)(英雄模型包含外键)
书籍序列化器,关联many
首先,书籍模型中不含有外键,而英雄模型中含有书籍的外键。
外键的定义:
hbook = models.ForeignKey(BookInfo,on_delete=models.CASCADE,verbose_name='图书')
那么在模型里,知道了某个英雄,通过下面得到该英雄属于哪本书
hero = HeroInfo.objects.get(id=1) hero.hbook
而知道了某本书,通过下面得到该书中包含哪些英雄
book = BookInfo.objects.get(id=1) book.heroinfo_set #注意上面是英雄模型类的小写
定义关联英雄的序列化器
1.关联英雄主键
from rest_framework import serializers from app.models import BookInfo #定义序列化器 class BookInfoSerializer(serializers.Serializer): id = serializers.IntegerField(label='id',read_only=True) #read_only=True表明该字段只能序列化,不能反序列化 #反序列化是将json数据转换成模型数据,入库,而id是自动生成的,因此不需要手动入库 btitle = serializers.CharField(max_length=20,label='名称') bpub_date = serializers.DateField(label='发布日期') bread = serializers.IntegerField(default=0,label='阅读量') bcomment = serializers.IntegerField(default=0,label='评论量') is_delete = serializers.BooleanField(default=False,label='逻辑删除') # 1关联英雄主键,一方序列化多方必须加上many=True heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True,many=True)
输入结果:
2.第二种方法,关联英雄的__str__返回值
#2关联英雄的__str__返回值
heroinfo_set=serializers.StringRelatedField(read_only=True,many=True)
结果:

浙公网安备 33010602011771号