当前位置:网站首页>Day12-关联序列化处理
Day12-关联序列化处理
2022-07-17 00:03:00 【Wbig】
1.关联序列化器序列化
1.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(Teacher,on_delete=models.CASCADE,verbose_name='老师')
class Meta:
verbose_name = '学生表'
verbose_name_plural = verbose_name
db_table = 'student'
def __str__(self):
return self.stu_name
编写序列化器
from rest_framework import serializers
from student.models import Teacher,Student
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = '__all__'
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
1.2 StringRelated外键序列化
字段不可进行反序列化
class StudentSerializer2(serializers.ModelSerializer):
teacher = serializers.StringRelatedField()
class Meta:
model = Student
fields = '__all__'
1.3 SlugRelated外键序列化
只能序列和查询
class StudentSerializer2(serializers.ModelSerializer):
#teacher = serializers.StringRelatedField()
teacher = serializers.SlugRelatedField(read_only=True, slug_field='tea_name')
class Meta:
model = Student
fields = '__all__'
1.4 PrimaryKeyRelated外键序列化
只能序列化,返回主键
class StudentSerializer2(serializers.ModelSerializer):
# 1.使用外检表的str方法进行序列化
# teacher = serializers.StringRelatedField()
# 2.指定字段进行序列化
# teacher = serializers.SlugRelatedField(read_only=True, slug_field='tea_name')
# 3.使用外键表的主键进行序列化
# teacher = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Student
fields = '__all__'
1.5 外键自定义序列化方式
class StudentSerializer2(serializers.ModelSerializer):
# 4,.使用自定义方法进行序列化,字段自定义(名字自己起)
tea_name = serializers.SerializerMethodField(read_only=True)
def get_tea_name(self,obj):
return obj.teacher.tea_name
class Meta:
model = Student
fields = '__all__'
2 关联序列化器反序列化
2.1 默认关联反序列化方式
def post(self,request):
#使用序列化器对数据进行反序列化
ser = StudentSerializer(data = request.data)
if ser.is_valid(raise_exception=True):
ser.save()
return Response({'msg':'success'},status=201)
return Response({'msg':'error'})
总结
错误

解决
是因为添加数据的时候括号后边多加的逗号而引发的错误
边栏推荐
- [MariaDB] solution: error 1045 (28000): access denied for user 'root' @ 'localhost' (using password: yes)
- Meaning of AP
- 20210419-组合总和
- The difference between beanfactory and ApplicationContext
- 从catf1ag 两小时AK赛 PWN/ATTACK 查杀总结应急响应常用命令指南
- @ConfigurationProperties注解使用
- JSON related graphics
- 关于目前流行的 Redis 可视化管理工具的详细评测
- 【JDBC】批处理思路
- 必备基础:加签验签
猜你喜欢
随机推荐
flask 快速搭建一个API
【MariaDB】解决:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
[JDBC] batch processing idea
Oracle 自动存储管理 (ASM)
Watermelon book chapter 4
20210419-组合总和
函数初认识-上
Lambda相关图形
脚本后台运行时候将日志从控制台重定向到自己命名的文件
Mathematics 03 derivative and differential (to be supplemented)
记录一次easy_sql堆叠注入
Oracle 数据库启用归档日志模式和归档日志删除和生成频率
C 1 to 100 sum 9*9 multiplication table grade ABCDE
使用Pytorch中的nn来实现线性回归(简洁实现)
Pytoch implements linear regression manually
CVE-2022-34265 Django Extract & Trunc SQL注入漏洞复现
Three activation functions (relu, sigmoid, tanh) and multilayer perceptron
cmd中文乱码解决方案
在mysql數據庫插入中文值出現的亂碼解决
KQ permission control
![[MariaDB] start service, stop service and check status](/img/e7/7fa801d7c6ce91569375652a5b751c.png)








