Django:model.save()的时候在干什么
转:https://www.cnblogs.com/zywscq/p/5397439.html
Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None)
id和pk
如果一个model里没有显示声明哪一个字段(field)是主键(即在某个字段里声明primary_key=True),则django会自动生成一个名为id的AutoFields作为主键。model里的主键都有一个别名叫做pk(primary_key的缩写),无论这个主键是自动生成的还是我们指定的。使用pk和使用主键的名字是一样的效果。
注意1:对于一个要新加入数据库的model实例,在save()执行之前是无法知道它的id的,因为要算数据库中已有多少个本model才能算出它的id值。
>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id # Returns the ID of your new object.
force_update和force_insert
这两个参数一般较少用到,因为save()之后django执行的是UPDATE或者INSERT这两条SQL语句的哪一条,遵循如下算法:
1.如果这个对象已经有主键而且主键的值是True的(即不是None或者空字符串等),就执行UPDATE。
2.如果没有主键或者这条save()不会update任何字段,那么它就INSERT。
只有在某些特定情况下,需要强制save()执行INSERT或UPDATE时才会使force_update=True或force_insert=True(比如我要求能UPDATE就UPDATE,不能我也不取INSERT,那么我就把这个force_update参数设置为True)。
update_fields
用来指定哪些字段需要更新,别的不更新。默认是None,这样所有字段都会更新一遍。有时候字段很多而我们只需要更新很少的字段,可以用这个参数来提高一下效率。注意要给它的是一个可迭代对象(比如list等)。如果给它一个空的可迭代对象,那么就什么都不更新(注意和None不同,如果等于None是更新全部字段)。
一旦update_fields参数不使用默认值None,那么这条save()语句就是强制执行UPDATE的。
product.name = 'Name changed again'
product.save(update_fields=['name'])
Django:model.save()的时候在干什么的更多相关文章
- django model form 保存方法 django-rest-framework save 修改某一项值 方法
django Model Form django-rest-framework save 方法 修改某个数据的值
- django model中的save()方法
Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None) id和pk ...
- Django model中的save后的return
先给结论吧:在Django model的操作函数中,obj.save()后再执行return obj会返回obj的ID. 看例子: ... def create_session(self,bind_h ...
- 【转】Django Model field reference学习总结
Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...
- Django Model field reference
===================== Model field reference ===================== .. module:: django.db.models.field ...
- Django model对象接口
Django model查询 # 直接获取表对应字段的值,列表嵌元组形式返回 Entry.objects.values_list('id', 'headline') #<QuerySet [(1 ...
- Django学习之四:Django Model模块
目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...
- Django Model Form
ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...
- Django model select的各种用法详解
<Django model update的各种用法介绍>文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用 ...
随机推荐
- Ubuntu安装libevent
背景: 版本: libevent 2.1.6beta linux下: 按照github官方做法: $ sudo apt-get install openssl $ mkdir build && ...
- 删除链表中的重复元素:不留&留一个&删除一个
不留: [抄题]: 给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素. [思维问题]: 给出 1->2->3->3->4->4->5->nul ...
- ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- mybatis框架入门程序:演示通过mybatis实现数据库的查询操作
我们现在工程基于的数据库见“https://www.cnblogs.com/wyhluckdog/p/10147754.html”这篇博文. 1.mybatis下载 mybatis的代码由githua ...
- 【.Net姿势随记】const 与 readonly 初始化姿势
using System; class P { static readonly int A=B*10; static readonly int B=10; public ...
- DB2频繁出现死锁,常用解决问题的命令
--DB2频繁出现死锁,常用解决问题的命令db2 get snapshot for locks on sampledb2 get db cfg for sampledb2 update db cfg ...
- htons、htonl与字节序大小端
判断字节序大小端code #include <stdio.h> int main() { ) == ) printf("big endian\n"); else pri ...
- dedecms的if标签、foreach标签
1.if标签 (1)下拉列表 <select name="prize_type[]" class="type J-prize-type" id=" ...
- 5. Import the project download from Git
1.Recover eclipse project Copy .project from other project(You can new a project first in eclipse. T ...
- socket多文件发送(压缩,解压)
.客户端代码 public static void FileMoveInVirtualMachineForCompressor() { var obj = new object(); string i ...