当前位置:网站首页>第十二单元 关联序列化处理
第十二单元 关联序列化处理
2022-08-02 14:01:00 【czy1206527605】
一.默认外键序列化
1.现在假设我们有两张表
class Teacher(models.Model):
tea_name = models.CharField(max_length=20,verbose_name='老师姓名')
class Meta:
verbose_name = '老师表'
verbose_name_plural = verbose_name
db_table = 'teacher'
def __str__(self):
return self.tea_name
class Student(models.Model):
stu_name = models.CharField(max_length=20,verbose_name='学生姓名')
score = models.IntegerField(verbose_name='成绩')
sex = models.CharField(max_length=5,verbose_name='性别')
teacher = models.ForeignKey(to=Teacher, on_delete=models.CASCADE, verbose_name='老师')
# teacher从表外键默认是tea_id,而不是tea_name
class Meta:
verbose_name = '学生表'
verbose_name_plural = verbose_name
db_table = 'student'
def __str__(self):
return self.stu_name
我们在从表student中的外键一般会显示为主表的id
如何将外键显示从id改为主表绑定字段的内容呢?
2.模块准备
from rest_framework import serializers
from student.models import Teacher,Student
1.StringRelated外键序列化
将关联表的__str__方法作为结果返回,设置read_only代表该字段不进行反序列化校验
使用外键表的str方法序列化
class StudentSerializer2(serializers.ModelSerializer):
teacher = serializers.StringRelatedField()
class Meta:
model = Student
fields = '__all__'
2.SlugRelated外键序列化
指定字段序列化 将某字段的内容更改为指定展示字段的内容
class StudentSerializer2(serializers.ModelSerializer):
teacher = serializers.SlugRelatedField(read_only=True,slug_field='tea_name')
class Meta:
model = Student
fields = '__all__'
3.PrimaryKeyRelated外键序列化
PrimaryKeyRelatedField外键序列化,使用外键表的主键进行序列化。跟原来的模型序列化器效果一样
class StudentSerializer2(serializers.ModelSerializer):
teacher = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Student
fields = '__all__'
4.外键自定义序列化方式
使用自定义方法进行序列化,字段自定义,得是数据库里有的字段(名字自己起)
class StudentSerializer2(serializers.ModelSerializer):
tea_name = serializers.SerializerMethodField(read_only=True)
# obj就是模型类的对象
def get_tea_name(self,obj):
return obj.teacher.tea_name
class Meta:
model = Student
fields = '__all__'
二.关联序列化器反序列化
默认序列化器反序列化不需要写任何字段,默认的关联字段会接受一个id数据作为校验依据并创建
讲白了就是普通模型序列化器
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
边栏推荐
猜你喜欢

玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据

logback源码阅读(一)获取ILoggerFactory、Logger

专访|带着问题去学习,Apache DolphinScheduler 王福政

【ONE·Data || Getting Started with Sorting】

RKMPP库快速上手--(一)RKMPP功能及使用详解

IDEA打包jar包

网络安全第四次作业

如何解决mysql服务无法启动1069

保姆级教程:写出自己的移动应用和小程序(篇三)

Awesome!Alibaba interview reference guide (Songshan version) open source sharing, programmer interview must brush
随机推荐
如何选择正规的期货交易平台开户?
Sentinel源码(四)(滑动窗口流量统计)
【ONE·Data || Getting Started with Sorting】
Flask请求应用上下文源码分析
Detailed explanation of ORACLE expdp/impdp
ORACLE expdp/impdp详解
Swagger 的使用
2022-08-02日报:2022年7月最热的10篇AI论文
Linux:CentOS 7 安装MySQL5.7
shell脚本“画画”
方舟生存进化淘宝面板服务器是怎么一回事?
drf源码分析与全局捕获异常
Flask项目的完整创建 七牛云与容联云
WiFi Association & Omnipeek Packet Capture Analysis
Break the limit of file locks and use storage power to help enterprises grow new momentum
MySQL数据库语法格式
Geoffery Hinton:深度学习的下一个大事件
stack && queue
【学习笔记】数位dp
Flutter 实现光影变换的立体旋转效果