ModelSerializer
目的:可以使用ModelSerializer根据模型类生成字段
作用:
1.可以参考模型自动生成字段,还可以自己编写字段
提供了create方法和update方法
from rest_framework import serializers class BookModelSerializer(serializers.ModelSerializer): mobile = serializers.CharField(max_length=11,min_length=11,label='手机号') class Meta: model = BookInfo # 参考模型类生成字段 fields = '__all__' #生成所有字段 fields = ('id', 'btitle', 'bpub_date') #指明生成相应字段 exclude = ('image',) #使用exclude可以明确排除掉 read_only_fields = ('id', 'bread', 'bcomment') #可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段 #给自动生成的字段添加属性(自动生成字段不满足需求时) extra_kwargs = { 'bread': {'min_value': 0, 'required': True}, 'bcomment': {'min_value': 0, 'required': True}, }
视图代码:
'''' ======================模型类序列化器,测试序列化===================================== ''' from book.models import BookInfo from book.serializers import BookModelSerializer # 序列化 # 1.获取模型类对象 book = BookInfo.objects.get(id=1) book.mobile = '17691394303' #因为mobile 是在序列化器中自定义的字段,数据库没有,所以要用必须指定(或者在序列化器中指定mobile字典:write_only(只写,只进行反序列化)) # 2.创建序列化器对象 serializer = BookModelSerializer(instance=book) #3.输出 print(serializer.data)
# ======================模型类序列化器,测试反序列化 create添加数据===================================== from book.serializers import BookModelSerializer # 1.准被数据 book_dict = { "btitle":"三国演义", "bpub_date":"2019-01-02", "bread":50, "bcomment":25 } # 2.创建序列化器对象 serializer = BookModelSerializer(data=book_dict) #3.校验,入库 serializer.is_valid(raise_exception=True) serializer.save()
# ======================模型类序列化器,测试反序列化 update更新数据===================================== from book.serializers import BookModelSerializer from book.models import BookInfo # 1.准被数据 book_dict = { "btitle":"红楼梦", "bpub_date":"2019-01-02", "bread":50, "bcomment":25 } # 序列化 # 1.获取模型类对象 book = BookInfo.objects.get(id=1) # 2.创建序列化器对象 serializer = BookModelSerializer(data=book_dict,instance=book) #3.校验,入库 serializer.is_valid(raise_exception=True) serializer.save()