ModelSerializer,自动创建序列化器

先列出projects的model定义规则

class Projects(models.Model):

    "创建projects模型类"
    #unique=True 设置唯一键
    #verbose_name 字段人性化显示
    #help_text api文档的中文显示
    name = models.CharField(verbose_name="项目名称",max_length=30,unique=True,help_text="项目名称")
    leader = models.CharField(verbose_name='负责人', max_length=50, help_text='负责人')
    tester = models.CharField(verbose_name='测试人员', max_length=50, help_text='测试人员')
    programer = models.CharField(verbose_name='开发人员', max_length=50, help_text='开发人员')
    publish_app = models.CharField(verbose_name='发布应用', max_length=100, help_text='发布应用')
    # 11. null设置数据库中此字段允许为空, blank用于设置前端可以不传递, default设置默认值
    #12.长文本不能用charfield 要用TextField
    desc = models.TextField(verbose_name='简要描述', help_text='简要描述', blank=True, default='', null=True)
    desc2 = models.TextField(verbose_name='简要描述', help_text='简要描述', blank=True, default='', null=True)

    #models.IntegerField(choices=[])可以限定该字段值的选择范围

    # 定义子类Meta, 用于设置当前数据模型的元数据信息
    class Meta:
        db_table = 'tb_projects' #给数据库更换表名(默认是app名projects_model名小写,即 projects_projects)
        # 会在admin站点中, 显示一个更人性化的表名
        verbose_name = '项目'
        verbose_name_plural = '项目'#复数形式

    def __str__(self):
        return self.name

ModelSerializer自动创建Projects序列化器

from rest_framework import serializers
from projects.models import Projects
class ProjectModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = Projects
        fields = "__all__"

我们打印下 我们创建的序列化器
python manage.py -i ipython

在这里插入图片描述接下来我们还有一些对字段的自定义校验等等;

from rest_framework import serializers
from rest_framework.validators import UniqueValidator

from projects.models import Projects

def is_unique_project_name(name):
    if '项目' not in name:
        raise serializers.ValidationError('项目名称中必须包含"项目"')

class ProjectModelSerializer(serializers.ModelSerializer):
    #要想自定义 就重新自己写一个,把自动生成的覆盖掉
    name = serializers.CharField(label='项目名称', max_length=200,
                                 help_text='项目名称', write_only=True,
                                 validators=[UniqueValidator(queryset=Projects.objects.all(), message='项目名已存在'),
                                             is_unique_project_name],
                                 error_messages="")
    class Meta:
        model = Projects
        # all 把所有的字段拿來做自動创建序列化器
        #fields = "__all__"
        #自定义指定字段来创建序列化器
        #python manage.py shell -i ipython
        fields = ('id','name','leader','tester','programer')
        #反选
        #exclude = ()
        #指定不校验的字段(只进行输出,不输入校验)
        #read_only_fields = ("leader")
        # 7. 使用extra_kwargs参数, 可以修改未显式声明的字段的属性
        # key为校验的选项名, value为自定义错误提示字符串

        #也可以在这里重新制定序列化器的字段校验,和最上面重新制定name字段校验的是一样的
        extra_kwargs = {
            'leader': {
                'write_only': True,
                'error_messages': {'max_length': '最大长度不超过50个字节'}
            },
            # 可以为序列化器字段, 添加或者修改属性
            'name': {
                'write_only': True,
                'validators': [UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'),
                                             is_unique_project_name],
                'label': '项目名称'
            }
        }
   

自动创建序列化器的同时 会自动创建
def create() 和 def update() 方法,直接调用就可以了

models.CharField(verbose_name=‘测试人员’, max_length=50, help_text=‘测试人员’)
默认trim_whitespace=True 就把前后的空格给去掉了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值