没有合适的资源?快使用搜索试试~ 我知道了~
序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 60 浏览量
2022-07-11
00:25:54
上传
评论
收藏 555KB DOC 举报
温馨提示
试读
13页
序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口.doc
资源推荐
资源详情
资源评论
序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承 GenericAPIView 类重写接
口
今日内容概要
序列化多表操作
请求与相应
视图组件
内容详细
1、序列化多表操作
模型类 models.py 中
# 新建 django 项目
# 创建表 模型类 models.py 中:
from django.db import models
# 4 张表
class Book(models.Model):
name = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5, decimal_places=2)
publish = models.ForeignKey(to=‘Publish’, on_delete=models.CASCADE) #
to=‘Publish’ 自动关联 publish 表主键 // on_delete=models.CASCADE 级联删除
authors = models.ManyToManyField(to=‘Author’)
def __str__(self):
return self.name
@property
def publish_detail(self): # 定制字段
return {‘name’: self.publish.name, ‘addr’: self.publish.city}
@property
def author_list(self): # 定制字段
l = []
# print(self.authors.all())
for author in self.authors.all():
# print(author.author_detail)
l.append({‘name’: author.name, ‘age’: author.age, ‘addr’:
author.author_detail.addr})
return l
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
author_detail = models.OneToOneField(to=‘AuthorDatail’, on_delete=models.CASCADE)
# OneToOneField 就是 ForeignKey + unique=True
class AuthorDatail(models.Model):
telephone = models.BigIntegerField()
addr = models.CharField(max_length=64)
class Publish(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
“““
在每个表中写入数据一一对应
第五个自动创建的关联表 也写入数据
“““
创建序列化类 serializer.py
from .models import *
from rest_framework import serializers
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
# fields = ‘__all__’
fields = [‘id’, ‘name’, ‘price’, ‘authors’, ‘publish’, ‘publish_detail’, ‘author_list’]
# 由于前端的 publish 与 authors 会显示为:id 所以需要定制序列化字段
# depth=1 # 等同于定制序列化的字段(2 种方案) 但是尽量不要用,因为它
是关联表一层全部取出来
# 定制序列化的字段(2 种方案)选择表模型中: 显示出版社名、地址;笔者
名年龄地址
extra_kwargs = {
‘publish’: {‘write_only’: True}, # 原有的字段就不需要再显示
‘authors’: {‘write_only’: True},
}
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = ‘__all__’
class AuthorDetailSerialzier(serializers.ModelSerializer):
class Meta:
model = AuthorDatail
fields = ‘__all__’
class PublishSerialzier(serializers.ModelSerializer):
class Meta:
model = Publish
fields = ‘__all__’
视图类 views.py 中:
from .serializer import *
from rest_framework.response import Response
from rest_framework.views import APIView
from app01.models import Book
class BookView(APIView):
# 查询所有图书
def get(self, request):
book_list = Book.objects.all()
ser = BookSerializer(instance=book_list, many=True)
return Response(ser.data)
# 新增图书数据
def post(self, request):
ser = BookSerializer(data=request.data)
剩余12页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2836
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功