21 序列化器(二)

作用:

  自动生成序列化器

  写好的 create、update 方法

  也可以手动生成序列化字段

使用:

from rest_framework import serializers
from booktest.models import BookInfo

class BookInfoSerializer(serializers.ModelSerializer):
    # 手动加入序列化
    # phone = serializers.CharField(max_length=11,min_length=11,label='电话号码',write_only=True)
    class Meta: # 自动生成序列化器
        fields = '__all__'
        model = BookInfo

  

fields:

  • 也可以是列表或元组来指定序列化字段

  • fields=['btitle','bpub_date']

model:序列化的模型类

设置只读属性:

from rest_framework import serializers
from booktest.models import BookInfo

class BookInfoSerializer(serializers.ModelSerializer):
    # 手动加入序列化
    # phone = serializers.CharField(max_length=11,min_length=11,label='电话号码',write_only=True)
    class Meta: # 自动生成序列化器
        ......
        read_only_fields = ['btitle']

  修改自动生成字段不满意的地方

class BookInfoSerializer(serializers.ModelSerializer):
    class Meta: # 自动生成序列化器
        ...
        extra_kwargs = {
            'bread':{
                "max_value":99999,
                'min_value':0
            }
        }

  序列化

from booktest.serializers import BookInfoSerializer
from booktest.models import BookInfo

book = BookInfo.objects.get(id=1)

# 数据库中没有 而在序列化中手动写入字段 解决方法:
'''
1.删除序列器中字段
2.添加数据库中字段
3.在获取后添加属性在序列化
4.序列化器设置为只写 write-only 或者设置默认值
'''
# book.phone ='13838438438'

serializer = BookInfoSerializer(instance=book)
serializer.data

  反序列化

from booktest.serializers import BookInfoSerializer
from booktest.models import BookInfo

book = BookInfo.objects.get(id=15)

book_dict = {
    'btitle':'鹿鼎记xx',
    'bpub_date':'2000-11-11',
    'bread':1000,
    'bcomment':50,
}

serializer=BookInfoSerializer(instance=book,data=book_dict)

# 校验
serializer.is_valid(raise_exception=True)

serializer.save()

  

上一篇:深究Spring中Bean的生命周期


下一篇:Java [Leetcode 229]Bulls and Cows