模型序列化器编写方式
之前的序列化器,很明显可以感觉到,如果模型类字段少了,还行,但是模型字段越来越多,那么开发者在序列化器里所要复刻的字段也要越来越多,很麻烦奥
而且还得手动实现update和create方法,而且光写了序列化器字段还不行,还得有字段属性
于是乎,有了现在的与模型类关联的序列化器,可以更加方便的进行字段映射以及内置方法的编写,简直是太棒了👍
模型类关联序列化器大概总结有如下三个特性,一个缺点
-
特点
-
基于模型类自动生成一系列字段
-
自动生成的系列字段,同时还包含unique、max_length等属性校验
-
包含默认的create和update的实现
-
-
缺点
-
不会自动映射模型类字段的default属性
-
那么模型类关联的序列化器用啥呢?用的是新的序列化器基类
from rest_framework.serializers import ModelSerializer
比如一个学生模型类
from django.db import models class Student(models.Model): # 姓名 年龄 性别 分数 name = models.CharField(max_length=20,verbose_name="姓名") age = models.IntegerField(verbose_name="年龄") gender = models.CharField(max_length=10,verbose_name="性别") score = models.IntegerField(verbose_name="分数") # 定义元类,指定表名 class Meta: db_table = 'students' def __str__(self): return self.name
按照之前的普通序列化写法,你需要同步一个字段,并将字段属性也要记得同步,非常麻烦 但通过与模型类关联的序列化器就很简单了
-
首先通过继承ModelSerializer基类
-
通过序列化器元类属性中的model属性关联模型类
-
通过序列化器元类属性中的fields属性指明序列化器需要处理的字段
# 序列化器文件---模型序列化器 from rest_framework import serializers from myapp.models import Student # 继承模型序列化器 class StudentModelSerializer(serializers.ModelSerializer): # 定义元类 class Meta: model = Student # 指明需要进行序列化的模型类 fields = "__all__" # 指明模型类的全部字段参与序列化和反序列化的操作
模型类关联的序列化器和普通的序列化器使用方法一样
使用序列化器返回当前所有的商品数据,还是像之前一样传入instance参数即可,还要记得由于是多个商品,不是单独数据,要记得加many=True参数