关于django—模型序列化器类详细内容(补充)

一、定义模型序列化器类

1、继承serializers.ModelSerializer类或其子类
在这里插入图片描述
2、需要在Meta内部类中指定model、fields类属性参数
3、model指定模型类(需要生成序列化器的模型类)
4、fields指定模型类中哪些字段需要自动生成序列化器字段
1)、如果指定为__all__,那么模型类中所有的字段需要自动转化为序列化器字段
2)、如果将特定的字段转化为序列化器字段,用元组表示

fields=(‘id’,‘name’,‘leader’,‘interfaces_set’,‘token’)
3)、exclude指定模型类中哪些字段不需要设置为序列化器字段,其他的字段需要转化
exclude=(‘create_time’,‘update_time’)
在这里插入图片描述
5、会给id主键、有指定auto_new或者auto_add_now参数DateTimeField字段,添加read_only=True
6、有设置unique=True的模型字段,会自动在validators列表中添加唯一约束校验UniqueValidator
7、如果有设置default=True的模型字段,会自动添加required=True
8、有设置null=True的模型字段,会自动添加allow=True
9、有设置blank=True的模型字段,会自动添加allow_blank=True
在这里插入图片描述

二、修改自动生成的序列化器字段

方式一:
a、可以重新定义模型类中同名的字段
b、自定义字段的优先级会更高(会覆盖自动生成的序列化器字段)
c、fields元组中必须指定进行序列化或者反序列化操作的所有字段名称。指定了’all’和exclude除外
方式二
a、如果自动生成的序列化器字段,只有少量不满足要求,可以在Meta中extra_kwargs字典进行微调
b、将需要调整的字段作为key,把具体需要修改的内容作为value

例如:
在这里插入图片描述
c、可以将需要批量设置read_only参数的字段名添加到Meta中的read_only_fields元组
read_only_fields=(‘leader’,‘is_execute’,‘id’)

三、视图中运用模型序列化器类

1、导入ProjectModelSerializer
在这里插入图片描述
2、创建数据时,报错误
raise TypeError(“%s() got an unexpected keyword argument ‘%s’” % (cls.name, kwarg))
TypeError: Projects() got an unexpected keyword argument ‘myname’
在这里插入图片描述

原因:当save()方法中传递有参数时,校验通过后会将myname参数添加到validated_data字典中,当调用save方法后,会执行create方法创建数据,但是模型类中没有myname字段,所以报错,要把这myname个参数删掉,才能创建数据;
怎么做???
当前端传入的数据检验通过后需要在模型序列化器类中将myname字段删除,模型序列化器类中提供了create方法,但是父类提供的create方法不满足要求,需要重写create方法。
重写的内容为:validated_data.pop(‘myname’)

在这里插入图片描述

3、继承父类的create方法
a、继承ModelSerializer之后,ModelSerializer中实现了create和update方法
b、一般无需再次定义create和update方法

c、如果父类提供的create和update方法不满足需要时,可以重写create和update方法,最后再调用父类的create和update方法

四、token的输出

当设置token=serializers.CharField(read_only=True)时,
1、说明token只输出,不需要进行输入校验,
2、当前端传入的数据传给data参数,经过is_valid()方法进行检验,校验通过之后会返回validated_data参数(一般为字典),
3、之后执行save()方法,自动执行create方法,并将validated_data参数传给create方法进行创建数据,而validated_data字典中不包含token,所以创建的模型类对象中不包含token的key,
4、创建的模型对象去和序列化模型类中的字段进行对比时,会忽略序列化模型类中的token字段,因此要在create中添加token
5、添加token一定要添加到创建模型对象之后,不然会报错

在这里插入图片描述
利用postman,发送请求
在这里插入图片描述

五、一定要注意的是:

fields指定模型类中的字段和自定义的字段中那些需要自动生成序列化器字段

token在模型类中没有定义,需要自定义token字段,如果fields中添加了token字段,而序列化器中没有定义token序列化器字段,会报错

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django中,模型(Model)是用于与数据库交互的核心组件。序列(Serialization)是将数据结构或对象转换为字节流或文本格式的过程。视图(View)是用户请求的处理程序,负责处理HTTP请求并返回HTTP响应。在Django中,可以通过序列模型来实现在视图中返回JSON数据等格式的数据。 以下是一个简单的示例,演示如何在Django视图中序列模型: 1. 定义模型 ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) pub_date = models.DateField() ``` 2. 定义序列 ```python from rest_framework import serializers from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__' ``` 3. 定义视图 ```python from rest_framework.views import APIView from rest_framework.response import Response from .models import Book from .serializers import BookSerializer class BookListView(APIView): def get(self, request): books = Book.objects.all() serializer = BookSerializer(books, many=True) return Response(serializer.data) ``` 在上面的代码中,BookSerializer是一个序列,用于将Book模型序列为JSON格式的数据。BookListView是一个视图,用于处理HTTP GET请求,并将所有的Book模型序列为JSON格式的数据返回。 通过这种方式,可以在Django视图中方便地实现模型序列,从而返回JSON等格式的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值