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号