首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

drf使用不同的序列化程序在访问`serializer.data`后显示“您不能调用`.save()”

DRF(Django REST Framework)是一个用于构建Web API的强大框架。在DRF中,序列化程序(Serializer)用于将复杂的数据结构转换为Python原生数据类型,以便进行序列化和反序列化操作。

当我们在访问serializer.data后看到“您不能调用.save()”的错误消息时,这意味着我们正在尝试在只读模式下使用序列化程序。默认情况下,DRF的序列化程序是只读的,不支持保存(save)操作。

要解决这个问题,我们可以采取以下几种方法:

  1. 使用不同的序列化程序:可以尝试使用不同的序列化程序,如ModelSerializer,它提供了默认的保存(save)功能。ModelSerializer是DRF中的一个特殊序列化程序,它自动根据模型类生成序列化器,并提供了默认的保存(save)行为。您可以通过继承ModelSerializer来创建自定义的序列化程序,并在需要保存数据时使用它。
  2. 手动编写保存逻辑:如果您希望使用自定义的序列化程序,并且需要保存数据,您可以在视图中手动编写保存逻辑。您可以通过重写视图中的create()update()方法来实现保存数据的逻辑。在这些方法中,您可以使用序列化程序的validated_data属性来获取验证后的数据,并执行保存操作。
  3. 检查视图的请求方法:请确保您的视图使用的是正确的请求方法。如果您的视图使用的是GET方法,那么它将是只读的,不支持保存操作。您可以将视图的请求方法更改为POST或PUT等支持保存操作的方法。

总结起来,当我们在访问serializer.data后看到“您不能调用.save()”的错误消息时,可以尝试使用不同的序列化程序,如ModelSerializer,或者手动编写保存逻辑。同时,确保视图使用的是支持保存操作的请求方法。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(Tencent Blockchain):https://cloud.tencent.com/product/tencentblockchain
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django(44)drf序列化源码分析「建议收藏」

当用户通过form表单中填写数据,发送请求给后端,将数据提交给后端数据库,这个过程就是反序列化。反序列化时候,我们需要去验证前端提交数据是否符合后端制定规范,符合才进行入库。...drf序列化drf序列化类有3个 Serializer ModelSerializer(使用最多) ListSerializer 我们使用最多就是ModelSerializer,这三个序列化类都继承自..._errors) 这个方法是验证从前端传输过来字段是否验证成功,如果我们实例化对象没有传入data参数,将会无法调用is_valid,这个方法大多数用在反序列化时候 save def save...must call `.is_valid()` before calling `.save()`.' ) # 不能对无效数据调用save()方法 assert not self.errors...(owner=request.user)'.'" ) # 访问serializer.data不能调用save方法了,如果你需要在提交到数据库之前访问数据,那么请使用serializer.validated_data

46610

RESTful源码笔记之RESTful FrameworkMixins小结

0x00 引言 本篇对drfmixins进行简要分析总结。 Mixinsdrf中主要配合viewset共同使用,实现http方法与mixins相关类与方法进行关联。...course.fav_num += 1 course.save() 显然,这不是唯一解决方法,我们还可以seriliazer进行设置,我们还可以使用drf信号量进行解决!...Response(serializer.data) # 还需要将相关page信息序列化进行响应 serializer = self.get_serializer...) 对retrieve这个方法重写几率比较高,例如我们增加点击数时候,经常要对其进行一个重写。...一般情况下,当我们操作某一个model时候,涉及到另外一个model中数据修改,那么就需要对这个mixins下执行save逻辑方法进行重写。 参考

32510

Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发

调用getOpro()方法,调用getGoods接口时传入参数is_new,来获取新品,与之前获取商品调用接口相同,获取到数据通过for循环显示出来。...显然,已经实现了提交订单并付款,销售量更新。 三、DRF缓存设置 1.使用drf-extensions配置缓存 在一般情况下,将一些经常访问数据放入缓存中,可以加快网页响应速度。...retrieve和list方法,这主要是查询操作,对于新建、修改等操作一般是不能使用缓存。...对于一般情况而言,公开数据可以使用缓存,而需要验证才能访问私有数据则尽量不要使用缓存,可以根据自己需要对不同数据进行缓存配置。...可以看到,相同请求多次访问,Redis也不会增加数据,只有进行了不同类型请求才会增加数据,django-redis根据请求不同类型生成key,以区分不同类型请求。

2.2K10

DRF比Django认证和权限高在哪里

同时重写save方法,同步数据库时候,使用pygments包把code格式化存到highlighted字段。...owner_id不能为空?因为前面只给Snippet添加了owner字段,还没有写反序列化更新模型代码,所以通过请求访问视图,再尝试反序列化时候,报错了。...这个报错是发生这条代码: serializer.save(owner=self.request.user) 也就是说请求访问视图,进行反序列化了,但是反序列化失败了。非常奇怪!...我们请求中并没有用户信息,正常来说访问视图时候就该被拦截了。 给视图添加认证 我们需要让API更符合常规,让未认证用户不能执行视图中代码。...访问自己创建snippet,可以修改和删除: ? 自定义权限 以上是官网示例,我Postman测试了下,发现超管dongfanger可以创建snippet: ?

1.5K20

Django DRF路由与扩展功能实现

, 需要我们经常在as_view方法 ,编写http请求和视图方法对应关系, 事实上,路由中,DRF也提供了一个路由类给我们对路由代码进行简写。...) """ 使用GenericViewSet时,虽然已经提供了基本调用数据集(queryset)和序列化器属性,但是我们要编写一些基本 API时,还是需要调用DRF提供模型扩展类 [Mixins]...视图类中调用多个序列化器""" """原来视图类中基本上一个视图类只会调用一个序列化器,当然也有可能要调用多个序列化器""" from .serializers import StudentInfoModelSerializer...,我们可以重写这个方法来实现根据不同需求来调用不同序列化器 def get_serializer_class(self): if self.request.method == "GET": # 2个字段...执行视图dispatch()方法前,会先进行视图访问权限判断 通过get_object()获取具体对象时,会进行模型对象访问权限判断 内置提供权限: AllowAny 允许所有用户 IsAuthenticated

3K30

DRF二级视图GenericAPIView

如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。 serializer_class 应该用于验证和反序列化输入以及序列化输出序列化器类。...分页 以下属性用于与列表视图一起使用时控制分页。 pagination_class 分页列表结果时应使用分页类。...,被其他视图或扩展类使用,如果我们视图中想要获取序列化器对象,可以直接调用此方法。...详情视图使用 get_object(self) 返回详情视图所需模型类数据对象,默认使用lookup_field参数来过滤queryset。 视图中可以调用该方法获取详情信息模型类对象。...URL中只涉及名词,接口被统一,使用HTTP请求方法来区分动作。不同HTTP方法就代表着对资源不同操作。

67210

DRF中多对多ManytoMany字段更新和添加

背景:drf序列化器给模型输出带来了便利但是对于多对多字段网上查询内容却是很少(也有可能是本人不会搜答案)经过我多个日夜摸索,终于实现了我需求,现将自己心得记录一下说下我需求:定义一个订单模型里面的订单...['orderMenu'] = [] # 此时实例对象是OrderCent,传入实例对象获取orderMenu字段输入many = True 表示多个再使用.data序列化出来...serializers.ModelSerializer): class Meta: model = OrderCenterThough fields = "__all__"这里定义两个序列化器一个用于读取时候显示就是...list 和 retrieve 方法之前也是想只用一个序列化器来完成,但是总是会出现字段报错情况出于无奈正好也要大佬提出这样方法就试了一下这里 ReadOrderCenterSerializer主要就是为了自定义读取全部和单个数据需要显示内容...serializer_class = OrderCenterSerializer # permission_classes = [permissions.IsAuthenticated] # 权限方面 # 这里是根据不同请求调用不同序列化

71120

DRF自动生成OpenAPI文档

在这里我们使用drf-spectacular这个第三方库来自动生成OpenAPI schemas. drf-spectacular 安装,配置步骤可以参考drf-spectacular文档,下面简单给出步骤...安装和配置 使用 经过上面的基本配置,我们现在访问api/schema/swagger-ui/来查看swagger-ui风格文档,如下所示: 当你点击schema时候,就会显示响应字段描述...下面给出相应序列化器代码。...中描述,description是来自于序列化文档字符串,而各个字段title是来自于字段label,带有*意味着是必传字段,除此之外,字段其它描述是直接取自序列化器字段中参数。...视图集中使用 对于视图集而言,可以使用@extend_schema_view装饰器来直接装饰类。

2.7K20

Django&DRF重点内容大盘点

大家可以了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。...1.3一个程序注意点 1.3.1视图函数定义 1)定义视图函数之后,要有一个request形参接收请求对象。...使用 1)配置文件中设置配置项MEDIA_ROOT='上传文件保存目录' 2)定义模型类时,图片字段类型使用 ImageField 3)迁移生成表并在admin.py注册模型类,直接登录Admin...站点就可以进行图片上传 2.DRF框架 2.1目的 利用DRF框架快速实现RestAPI接口设计 2.2RestfulAPI接口设计风格 关键点 1)url地址尽量使用名词,不要使用动词 2)请求url...1.将数据库数据序列化为前端所需要格式,并返回 2.将前端发送数据反序列化为模型类对象,并保存到数据库中 2.4DRF框架 2.4.1作用:大大提高RestAPI接口开发效率 2.5序列化器Serializer

5.9K20

【愚公系列】2022年04月 Python教学课程 64-DRF框架之序列化

文章目录 一、DRF框架之序列化使用 1.设置新环境 2.创建新项目 3.创建模型类 4.创建序列化程序类 5.使用序列化程序 6.使用模型序列化程序 7.使用我们序列化程序编写常规 Django...视图 一、DRF框架之序列化使用 1.设置新环境 我们做任何其他事情之前,我们将使用venv创建一个新虚拟环境。...cd ~ django-admin startproject tutorial cd tutorial 完成,我们可以创建一个应用程序,我们将使用它来创建一个简单Web API。...我们可以通过声明与Django形式非常相似的序列化程序来做到这一点。名为目录中创建一个文件,然后添加以下内容。...() return instance 5.使用序列化程序 我们进一步使用之前,我们将熟悉如何使用序列化程序类。

78310

Django REST Framework-什么是视图(二)

DRF还提供了许多其他视图类型和装饰器,可以根据需要使用。视图还可以根据需要组合和嵌套。例如,我们可以将一个视图嵌套在另一个视图中,以构建复杂API端点。...Book.objects.all() serializer_class = BookSerializer def perform_create(self, serializer): serializer.save...self.get_object() serializer = self.serializer_class(author, context={'request': request}) data = serializer.data...AuthorDetail视图嵌套了AuthorBooks视图,用于显示特定作者书籍列表。AuthorDetail视图中,我们首先获取当前作者对象,然后将其序列化并将其书籍列表添加到序列化数据中。...我们使用了AuthorBooks视图实例来获取书籍列表,并将其数据添加到序列化数据中。在这里,我们还将request对象传递给序列化器和视图,以便可以序列化器中访问它。

28220

五、商品列表页

5.1.djangoview实现商品列表页 (1)goods/view_base.py goods文件夹下面新建view_base.py,为了区分django和django rest framework...HttpResponse(json.dumps(json_list),content_type='application/json') 但是这样有个问题,就是ImageFieldFile 和add_time字段不能序列化...return JsonResponse(json_data,safe=False) djangoserializer虽然可以很简单实现序列化,但是有几个缺点 字段序列化定死,要想重组的话非常麻烦 从上面截图可以看出来...,images保存是一个相对路径,我们还需要补全路径,而这些drf都可以帮助我们做到 以上写了这么多只是为了引入django rest framework和简单介绍django序列化用法,下面就是重点讲解...----django 这些view功能不同,主要是有mixin存在 mixins总共有五种:   CreateModelMixin   ListModelMixin   UpdateModelMixin

4.7K00

django rest framework serializers解读

serializers.fieild 我们知道django中,form也有许多field,那serializers其实也是drf中发挥着这样功能。我们先简单了解常用几个field。...,我们django中,form更强调对提交表单进行一种验证,而serializerfield不仅在进行数据验证时起着至关重要作用,将数据进行序列化返回也发挥着重要作用!...如果某个字段设置了read_only=True,那么就不需要进行数据验证,只会在返回时,将这个字段序列化返回   举个简单例子:在用户进行购物时候,用户post订单时,肯定会产生一个订单号,而这个订单号应该由后台逻辑完成...() return instance 可能会有人好奇,系统是怎么知道,我们需要调用serializercreate方法,还是update方法,我们从save( )方法可以看出,判断依据是...,但不存在与指定model当中,即不能save( ),可以在这delete掉!

1.7K10

DRF框架学习(二)

default 我们使用序列化和反序列化使用默认值 allow_null 表明该字段是否允许传入None,默认False help_text、label_text 可以理解为注释,web直观显示时候有一个显示信息...基本校验不能满足我们需求,我们可以补充验证行为。...') return attrs 4.6.2反序列化-数据保存 前提条件:校验通过之后,可以调用serializer.save()进行数据保存。...新增: 调用serializer.save()时候,会调用系统create方法,然后就会报错,我们如果想不报错,那么我们序列化器类中重写create方法。...serializer.data就能获取新增图书序列化字典数据 更新: 1.获取id为1图书 2.创建序列化器对象,要将更新数据,传入对象 3.调用is_valid方法进行数据校验。

4.1K30

【愚公系列】2022年04月 Python教学课程 70-DRF框架之视图集

视图集只使用as_view()方法时候,才会将action动作与具体请求方式对应上。...# 初始化生成序列化器对象 ser = BookSerializer(books, many=True) # 使用序列化器对象data方法获取序列化结果...GenericViewSet就帮助我们完成了这样继承工作,继承自GenericAPIView与ViewSetMixin,实现了调用as_view()时传入字典(如{‘get’:‘list’})映射处理工作同时...=True) # raise_exception=True 验证失败直接返回 # 3、更新图书 ser.save() # # 4、返回保存图书数据...同一个类中指定视图采用不同queryset或者不同序列化器 """ def get_queryset(self): """视图集中视图对象下面会新增一个action

1.6K30

DRF框架学习(三)

DRF框架学习(三) 1.视图 1.1作用 1.控制序列化执行(数据检验、数据保存、转换数据(序列化操作)) 2.控制数据库查询操作。...1.2.2GenericAPIView 继承于APIView,是APIView子类,APIView基础上添加操作序列化器和数据库查询方法。封装这些方法,我们可以直接使用。...b)方法: get_serializer创建一个视图所使用序列化器类对象。 get_serializer_class返回当前视图所使用序列化器类。...2)创建一个扩展类,将抽取代码进行封装。 3)原视图函数中进行调用。 1.3.1扩展类5个详解 DRF框架提供了5个扩展类,封装了通用增删改查流程。...GenericViewSet就帮助我们完成了这样继承工作,继承自 GenericAPIView与 ViewSetMixin,实现了调用as_view()时传入字典(如 {'get':'list'})

1.1K20

DRF入门

DRF序列化DRF中有一个serializers模块专门负责数据序列化DRF提供方案更先进、更高级别的序列化方案。...序列化器: 序列化器参数 序列化器工作流程: 序列化(读数据:视图里通过ORM从数据库获取数据查询集对象 -> 数据传入序列化器-> 序列化器将数据进行序列化 -> 调用序列化.data获取数据...-> 响应返回前端 反序列化(写数据):视图获取前端提交数据 -> 数据传入序列化器 -> 调用序列化.is_valid方法进行效验 -> 调用序列化.save()方法保存数据 序列化器常用方法与属性...: serializer.is_valid():调用序列化器验证是否通过,传入raise_exception=True可以验证失败时由DRF响应400异常。...serializer.errors:获取反序列化器验证错误信息 serializer.data:获取序列化器返回数据 serializer.save():将验证通过数据保存到数据库(ORM操作)

1.6K50
领券