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"]

 

增删改查的操作方法和以前一样,见

drf-序列化和反序列化。---查询和提交 之Serializer

drf-序列化器save操作

基于apiview接口实现 -------查、更新、删除

drf-save()更新操作

posted @ 2022-10-19 19:47  凯宾斯基  阅读(56)  评论(0编辑  收藏  举报