首先看一下model.py这个文件
#学生的表 用多对多来关联另一个表
class StudentModel(models.Model): username = models.CharField(max_length=43) password = models.CharField(max_length=43) course = models.ManyToManyField(to='CoursetModel',related_name='student',null=True,blank=True)
#定义这个名字 一般在哪个表中 写哪个表 意思是另一个表查询的时候,可以通过这个来进行查询。 class Meta: db_table = 'student'
#课程的表
class CoursetModel(models.Model): title = models.CharField(max_length=43) content = models.CharField(max_length=43) class Meta: db_table = 'course'
反序列化
方法很多,自己参考 这是个反序列化 进行添加数据的 class StudentSerializer(Serializer): studentmodel_id = serializers.IntegerField(write_only=True) #重写学生的id 权限:(只写) coursemodel_id = serializers.IntegerField(write_only=True) #重写课程的id 权限:(只写) #重写 create 方法 def create(self, validated_data): stu = StudentModel.objects.filter(id=validated_data.pop('studentmodel_id')).first() #用一个变量 接收学生的ID对应的数据 #这个变量通过另一个表的关系来添加课程的id stu.course.add(validated_data.pop('coursemodel_id')) #最后返回 return stu
序列化学生表 (一对多的)
学生表的序列化
class StudentModelSerializer(ModelSerializer): course_name = serializers.CharField(source='course.name') #从课程表中拿到它的名称 class Meta: model = CoursetModel fields = ('id','name','course_name') #只让用这个几个字段
序列化学生表 (二)
class CourseModelSerializer(ModelSerializer): class Meta: model = CoursetModel fields = '__all__' class StudentModelSerializer(ModelSerializer): course = CourseModelSerializer(read_only=True) #继承上一个 只读 class Meta: model = CoursetModel fields = '__all__' 表达的不清,懂得自懂。。。....
序列化
class CourseModelSerializer(ModelSerializer): class Meta: model = CoursetModel fields = '__all__' class StudentModelSerializer(ModelSerializer): course_name = serializers.SerializerMethodField() class Meta: model = CoursetModel fields = '__all__' def get_course_name(self, student_obj): cou = CoursetModel.objects.filter(student=student_obj).first() return CourseModelSerializer(instance=cou,many=True).data.get('name') 不要问我为什么,我知道有限
可供参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 一对多序列化和反序列化 - Python技术站