序列化书籍的时候,输出关联的英雄信息(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)

结果:

 

posted @ 2020-09-17 11:07  亦木121  阅读(158)  评论(0)    收藏  举报