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'})
总结
错误
解决
是因为添加数据的时候括号后边多加的逗号而引发的错误