当前位置:网站首页>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'})
总结
错误

解决
是因为添加数据的时候括号后边多加的逗号而引发的错误
边栏推荐
猜你喜欢
随机推荐
@postconstruct注解 和 InitializingBean 在bean实例化后执行某些初始化操作
Oracle 自动存储管理 (ASM)
JVM内存模型
【单例模式】饿汉式、懒汉式、双重锁安全验证
@ConfigurationProperties注解使用
PageHelper网图形
在centos安装mysql出现的问题
Three activation functions (relu, sigmoid, tanh) and multilayer perceptron
Matlab drawing heart
flask报错No matching distribution found for flask._compat的一种解决方法
如何使用服务器搭建我们的博客
Computer Graphics From Scratch - Chapter 3
Food chain (DFS memorization)
Swagger
记录定时任务中调用feign接口认证不通过的一次bug
20210512-递归公式
Build your own blog system website in one hour
2021-3-17-字节-胡牌
初始Flask
VirtualBox menu bar control









