当前位置:网站首页>第十二单元 关联序列化处理
第十二单元 关联序列化处理
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__'
边栏推荐
猜你喜欢
随机推荐
Minio文件上传
stack && queue
第二届中国Rust开发者大会(RustChinaConf 2021~2022)线上大会正式开启报名
Sentinel源码(六)ParamFlowSlot热点参数限流
2022-08-02日报:2022年7月最热的10篇AI论文
binary search && tree
不精确微分/不完全微分(Inexact differential/Imperfect differential)
大而全的pom文件示例
GTK:Gdk-CRITICAL **: IA__gdk_draw_pixbuf: assertion ‘GDK_IS_DRAWABLE (drawable)‘ failed
网络安全第五次作业
Differences and concepts between software testing and hardware testing
【ONE·Data || Getting Started with Sorting】
打破文件锁限制,以存储力量助力企业增长新动力
CVE-2020-27986 (Sonarqube sensitive information leak) vulnerability fix
FFmpeg 的AVCodecContext结构体详解
网络安全第一次作业(2)
php开源的客服系统_在线客服源码php
音频处理:浮点型数据流转PCM文件
智能指针-使用、避坑和实现
劲爆!阿里巴巴面试参考指南(嵩山版)开源分享,程序员面试必刷