22 序列化器(二)
作用:
自动生成序列化器
写好的 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:
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()
                    
                
                
            
        
浙公网安备 33010602011771号