drf-ModelSerializer 根据数据模型 自动生成序列化模型
https://www.bilibili.com/video/BV1z5411D7BQ?p=13&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea
view.py
from rest_framework.views import APIView
from sers.models import Book
from rest_framework import serializers
from rest_framework.response import Response
# 针对模型设计序列化器 ----查询数据库数据赋值到这个类然后扔出去
# (我把数据转成json给前端发叫序列化)
# class BookSerializers(serializers.Serializer):
# id=serializers.IntegerField(read_only=True)#在客户端提交数据【反序列化阶段不会要求有id字段】 可以不传
# title = serializers.CharField(max_length=8)
# price = serializers.IntegerField(required=False) #required=True=反序列化阶段非必填)
# # 左边date是给出去的字段,右边soure是具体数据模型对应取值的字段
# date = serializers.CharField(source="pub_date")
#
# # ======把操作独立出来意义在于解耦======== 当调用save()的时候源码create()方法是空的所以要重写
# def create(self, validated_data):
# # 添加数据逻辑
# return Book.objects.create(**self.validated_data)
#
#
#
# #当调用save()的时候,源码判断到有传instance的值,走update的方法,update的方法为空,
# # 所以要重写,源码里已做了instance重新赋值更新后的数据,所有返回的是更新后的信息
# def update(self, instance, validated_data):
# # 更新逻辑
# Book.objects.filter(pk=instance.pk).update(**self.validated_data)
# uodated_book=Book.objects.get(pk=instance.pk)
# return uodated_book
#这里写的就是上面写的 简写方法,自动根据模型生成序列化模型,且写好了create()和update()的方法
class BookSerializers(serializers.ModelSerializer):
# 单独配置给字段替换名字(会新增一个字段)
date = serializers.CharField(source="pub_date")
# 指定模型类Book,会根据模型类生成对应的序列化模型,且自带 create()和update()的方法,无需自己重写
#update()默认是根据id为条件更新
class Meta:
model=Book
# 序列化的字段选择,控制映射进来的字段
# fields=["title","id"]
#展示全部字段
# fields = "__all__"
# 排除不展示的字段 !!!注意,这个1方法不可以和fields共同存在
exclude=["pub_date"]
增删改查的操作方法和以前一样,见