首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么django ORM的‘saved’方法不返回保存的对象?

为什么django ORM的‘saved’方法不返回保存的对象?
EN

Stack Overflow用户
提问于 2012-06-07 17:23:05
回答 3查看 19.6K关注 0票数 46

对这个设计决策背后的推理有什么洞察力吗?在我看来,让obj.save()返回一些东西,只有好处(比如方法链),而且没有缺点。

EN

回答 3

Stack Overflow用户

发布于 2012-06-07 17:33:35

一般认为Python中的良好实践是拥有主要影响现有对象的函数,而不是返回自己。例如,sorted(yourlist)返回一个排序列表,但是yourlist.sort()对列表进行了适当的排序,不返回任何内容。

在一行上执行带有副作用的多个操作(相对于关注返回值的无副作用函数)并不是很好的实践。代码在行数方面将更加紧凑,但由于重要的副作用可能被隐藏在链的中间,所以很难读懂。如果要使用方法链接,请在链的开头使用没有副作用的函数,然后在结束时使用一个具有副作用的函数(如.save() )。

换句话说,在方法链中,链的开头是输入,链的中间是输入(沿着树导航、排序输入、更改字符串的情况等),而链的末尾是处理副作用的功能部分。如果你把方法和副作用埋在链的中间,那么你的方法链到底做了什么就不清楚了。

票数 70
EN

Stack Overflow用户

发布于 2015-05-06 13:49:28

这让我想起了格雷格·沃德( Greg 被拥护 )最近在Pycon2015的一般原则,不要把函数和过程混为一谈。每个函数都应该返回一个值或者有副作用,但不是两者都有.

基本上相同的问题是被问 of dict.update()。

票数 7
EN

Stack Overflow用户

发布于 2019-11-23 23:12:59

由于这是搜索"django返回保存的对象“时获得的第一个结果,因此,如果您仍然希望返回保存的对象,而不是使用:

代码语言:javascript
复制
ExampleModel(title=title).save()

它不返回任何内容,您可以使用:

代码语言:javascript
复制
saved_instance = ExampleModel.objects.create(title=title)

这是因为ExampleModel.objects是一个模型管理器,而不是类的一个实例,所以它不会返回自己。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10936737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档