当前位置:网站首页>第十二单元 关联序列化处理
第十二单元 关联序列化处理
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__'
边栏推荐
- redis延时队列
- els 长条方块变形条件、边界碰撞判定
- 文件加密软件有哪些?保障你的文件安全
- 世界上最大的开源基金会 Apache 是如何运作的?
- About the development forecast of the market outlook?2021-05-23
- ZABBIX配置邮件报警和微信报警
- 【Tensorflow】AttributeError: ‘_TfDeviceCaptureOp‘ object has no attribute ‘_set_device_from_string‘
- LayoutParams的详解
- 为什么四个字节的float表示的范围比八个字节的long要广
- ftp常用命令详解_iftop命令详解
猜你喜欢
随机推荐
Sentinel源码(四)(滑动窗口流量统计)
Object detection scene SSD-Mobilenetv1-FPN
监管再次重拳出击,后市如何?2021-05-22
世界上最大的开源基金会 Apache 是如何运作的?
Why does a four-byte float represent a wider range than an eight-byte long
动态刷新日志级别
Flask项目的完整创建 七牛云与容联云
为什么四个字节的float表示的范围比八个字节的long要广
劲爆!阿里巴巴面试参考指南(嵩山版)开源分享,程序员面试必刷
RKMPP API安装使用总结
Raft协议图解,缺陷以及优化
Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng
idea社区版下载安装教程_安装天然气管道的流程
Detailed explanation of ORACLE expdp/impdp
C语言提高篇(三)
大而全的pom文件示例
Break the limit of file locks and use storage power to help enterprises grow new momentum
php开源的客服系统_在线客服源码php
音频处理:浮点型数据流转PCM文件
配置zabbix自动发现和自动注册。









