Python全系列 教程
3567个小节阅读:5931.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
以上只是显示了一对多关系中,关系多方查询1的数据的序列化,下面展示如何序列化1查多方多的数据
models:
xxxxxxxxxx
class Student(models.Model):
SEX_CHOICES = ((1,'男')), (2, '女')
name = models.CharField(max_length=20, verbose_name='姓名')
age = models.IntegerField(null=True, blank=True, verbose_name='年龄')
sex = models.IntegerField(choices=SEX_CHOICES, default=1, verbose_name='性别')
# 必须增加属性 related_name='students'
classes = models.ForeignKey(Classes, related_name='students', null=True, on_delete=models.SET_NULL, verbose_name='班级')
serializers:
xxxxxxxxxx
from rest_framework import serializers
from .models import Classes, Student
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ['id','name','age','sex']
class Class2Serializer(serializers.ModelSerializer):
# 通过related_name反向查询的字段,创建序列化器对象
students = StudentSerializer(many=True,read_only=True)
class Meta:
model = Classes
fields = ['id','name','students']
注意
StudentSerializer 必须在 ClassesSerializer 上面
urls:
xxxxxxxxxx
path('classes/<int:pk>/', views.classes_detail),
views:
xxxxxxxxxx
def classes_detail(request, pk):
try:
classes = Classes.objects.get(pk=pk)
except Classes.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = ClassesSerializer(classes)
return JsonResponse(serializer.data)
else:
# 其他情况暂不处理
return HttpResponse(status=503)
测试
xxxxxxxxxx
GET http://127.0.0.1:8000/rest_app/classes/1/
实时学习反馈
1. 在班级和学生对应关系中,想获取班级信息时候获取该班级所有学生信息,那么需要在 ClassesSerializer中,重新指定 students字段,下划线处分别需要填写的代码是_____:
xxxxxxxxxx
class ClassesSerializer(serializers.ModelSerializer):
# students 命名是model中的 related_name
# 多条记录,则指定 many=True , read_only=True
_______ = StudentSerializer(many=True, read_only=True)
class Meta:
model = Classes
fields = ['id', 'name', _______]
A students 'students'
B 'students' 'students'
C 'students' students
D students students
2. 在视图函数中,根据pk获取班级,下划线处需要填写的代码是_____:
xxxxxxxxxx
def classes(request, pk):
try:
#根据pk获取Classes对象
___________
except Classes.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = ClassesSerializer(classes)
return JsonResponse(serializer.data)
else:
# 其他情况暂不处理
return HttpResponse(status=503)
A classes = Classes.get(pk=pk)
B classes = Classes.objects.get(pk=pk)
C classes = Classes.object.get(pk=pk)
D classes = Classes.Objects.get(pk=pk)
答案
1=>A 2=>B