首先看一下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')
不要問我爲什麼,我知道有限
可供參考。