首页 > 其他 > 详细

Django 一对多序列化和反序列化

时间:2019-12-26 16:54:27      阅读:213      评论:0      收藏:0      [点我收藏+]

 首先看一下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(super=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 一对多序列化和反序列化

原文:https://www.cnblogs.com/qinzeiqinwang/p/185cm.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!