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


 首先看一下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')
  不要問我為什么,我知道有限

 

可供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM