作用:
自动生成序列化器
写好的 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()