模型类序列化器

引入

  • 自定义的序列化器需要我们自己去手动创建每一个字段(太繁琐),模型类序列化器可以帮助我们省去这个繁琐步骤

模型类序列化器帮助我们完成了2件事:

(1)、根据指定的规则,自动映射字段参与序列化/反序列化;
(2)、重写了createupdate方法实现模型类对象的新建更新逻辑;

"""
模型类序列化器
serializers.ModelSerializer: 模型类序列化器基类
"""
"""
模型类序列化器
serializers.ModelSerializer: 模型类序列化器基类
"""
from rest_framework import serializers
from .models import *


# 自定义校验一
def check_btitle(value):
    if 'django' not in value:
        raise serializers.ValidationError('这不是一本关于django的书')


class BookInfoModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = BookInfo  # 潜台词:将来新建或更新的是BookInfo模型类
        # 1.自动映射字段(隐藏的主键字段也会自动映射,非主键的隐藏字段不会
        fields = "__all__" 
        # 2.显示声明参与序列化/反序列化的字段
        # fields = ['btitle', 'bpub_date', 'heros']
        # 3.排除指定字段,把其他字段映射过来参与序列化/反序列化
        # exclude = ['btitle', 'bpub_date']

        # 4.调整字段的约束条件(模型类序列化器映射的字段有些值不符合业务)
        extra_kwargs = {
            'bread': {'min_value': 0},
            'bcomment': {'min_value': 0},
            'btitle': {'validators': [check_btitle]}
        }
        # 5.设置read_only = True的字段(只作用于序列化操作)
        # read_only_fields = ['id', 'btitle']

终端测试:

  • 类名BookInfoModelSerializer()可以查看自动映射的字段
>>> from books_test.serializers import *
>>> BookInfoModelSerializer()
BookInfoModelSerializer():
    id = IntegerField(label='ID', read_only=True)
    btitle = CharField(label='名称', max_length=20)
    bpub_date = DateField(label='发布日期')
    bread = IntegerField(label='阅读量', max_value=2147483647, min_value=-2147483648, required=False)
    bcomment = IntegerField(label='评论量', max_value=2147483647, min_value=-2147483648, required=False)
    is_delete = BooleanField(label='逻辑删除', required=False)
    image = ImageField(allow_null=True, label='图片', max_length=100, required=False)

  • 测试新建(和自定义的序列化器方法一样):
>>> from books_test.serializers import*
>>> book_info = {'btitle': 'django从入门到上瘾', 'bpub_date': '2005-6-6'}
>>> bs = BookInfoModelSerializer(data=book_info)
>>> bs.is_valid()
True
>>> bs.save()
<BookInfo: django从入门到上瘾>
>>> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值