当前位置:网站首页>第十二单元 关联序列化处理
第十二单元 关联序列化处理
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__'
边栏推荐
- You can't accept 60% slump, there is no eligible for gain of 6000% in 2021-05-27
- Detailed explanation of stored procedures
- MySQL数据库设计规范
- Sentinel源码(一)SentinelResourceAspect
- Why does a four-byte float represent a wider range than an eight-byte long
- Configure zabbix auto-discovery and auto-registration.
- 微信小程序-最近动态滚动实现
- 网络安全第三次作业
- The bad policy has no long-term impact on the market, and the bull market will continue 2021-05-19
- WeChat Mini Program-Recent Dynamic Scrolling Implementation
猜你喜欢
如何选择正规的期货交易平台开户?
劲爆!阿里巴巴面试参考指南(嵩山版)开源分享,程序员面试必刷
乐心湖‘s Blog——MySQL入门到精通 —— 囊括 MySQL 入门 以及 SQL 语句优化 —— 索引原理 —— 性能分析 —— 存储引擎特点以及选择 —— 面试题
Differences and concepts between software testing and hardware testing
软件测试和硬件测试的区别及概念
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
监管再次重拳出击,后市如何?2021-05-22
世界上最大的开源基金会 Apache 是如何运作的?
基于深度学习的图像检索方法!
栈 && 队列
随机推荐
关于密码加密的一点思路
文件加密软件有哪些?保障你的文件安全
Geoffery Hinton:深度学习的下一个大事件
你接受不了60%的暴跌,就没有资格获得6000%的涨幅 2021-05-27
智能指针-使用、避坑和实现
第二届中国Rust开发者大会(RustChinaConf 2021~2022)线上大会正式开启报名
Sentinel源码(二)入口方法分析
About the development forecast of the market outlook?2021-05-23
网络安全第五次作业
replay视频播放器_怎么让手机音乐跟视频一起放
CVE-2020-27986(Sonarqube敏感信息泄漏) 漏洞修复
Word | 关于删除分节符(下一页)前面的版式就乱了解决方案
栈 && 队列
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
保姆级教程:写出自己的移动应用和小程序(篇三)
瑞吉外卖笔记——第08讲读写分离
AWVS工具介绍[通俗易懂]
软件测试和硬件测试的区别及概念
RKMPP API安装使用总结
机器学习——交叉验证法