django models.update
json/dict类型数据更新字段
目前主流的web开放方式都讲究前后端分离,分离之后前后端交互的数据格式大都用通用的jason型,那么如何用最少的代码方便的更新json格式数据到数据库呢?同样可以使用如下两种方法:
方法一:
data = {'username':'nick','is_active':'0'}
User.objects.filter(id=1).update(**data)
同样这种方法不能自动更新具有auto_now属性字段的值
通常我们再变量前加一个星号(*)表示这个变量是元组/列表,加两个星号(**)表示这个参数是字典
方法二:
data = {'username':'nick','is_active':'0'}
_t = User.objects.get(id=1)
_t.__dict__.update(**data)
_t.save()
方法二和方法一同样无法自动更新auto_now字段的值
注意这里使用到了一个__dict__方法
方法三:
_t = User.objects.get(id=1)
_t.role=Role.objects.get(id=3)
_t.save()
ForeignKey字段更新
假如我们的表中有Foreignkey外键时,该如何更新呢?
class User(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
username = models.CharField(max_length=255, unique=True, verbose_name='用户名')
is_active = models.BooleanField(default=False, verbose_name='激活状态')
role = models.ForeignKey(Role, on_delete=models.CASCADE, null=True, verbose_name='角色')
方法一:
User.objects.filter(id=1).update(role=2)
最简单的方法,直接让给role字段设置为一个id即可
当然也可以用dict作为参数更新:
User.objects.filter(id=1).update(**{'username':'nick','role':3})
方法二:
_role = Role.objects.get(id=2)
User.objects.filter(id=1).update(role=_role)
也可以赋值一个实例给role
当然也可以用dict作为参数更新:
_role = Role.objects.get(id=1)
User.objects.filter(id=1).update(**{'username':'nick','role':_role})
方法三:
_t = User.objects.get(id=1)
_t.role=Role.objects.get(id=3)
_t.save()
注意:这里的role必须赋值为一个对象,不能写id,不然会报错"User.role" must be a "Role" instance
当使用dict作为参数更新时又有一点不同,如下代码:
_t = User.objects.get(id=1)
_t.__dict__.update(**{'username':'nick','role_id':2})
_t.save()
Foreignkey外键必须加上_id,例如:{‘role_id’:3}
role_id后边必须跟一个id(int或str类型都可),不能跟role实例
ManyToManyField字段更新
假如我们的表中有ManyToManyField字段时更新又有什么影响呢?
class User(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
username = models.CharField(max_length=255, unique=True, verbose_name='用户名')
is_active = models.BooleanField(default=False, verbose_name='激活状态')
role = models.ForeignKey(Role, on_delete=models.CASCADE, null=True, verbose_name='角色')
groups = models.ManyToManyField(Group, null=True, verbose_name='组')
m2m更新:m2m字段没有直接更新的方法,只能通过清空再添加的方法更新了
_t = User.objects.get(id=1)
_t.groups.clear()
_t.groups.add(*[1,3,5])
_t.save()
add():m2m字段添加一个值,当有多个值的时候可用列表,参照上边例子
_t.groups.add(2)
_t.groups.add(Group.objects.get(id=2))
remove():m2m字段移除一个值,,当有多个值的时候可用列表,参照上边例子
_t.groups.remove(2)
_t.groups.remove(Group.objects.get(id=2))
clear():清空m2m字段的值
---------------------
原文:https://blog.csdn.net/weixin_42578481/article/details/80985049
django models.update的更多相关文章
- How to manage concurrency in Django models
How to manage concurrency in Django models The days of desktop systems serving single users are long ...
- django models 数据库操作
django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...
- Django models 操作高级补充
Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra
- Django models Form model_form 关系及区别
Django models Form model_form
- Django models .all .values .values_list 几种数据查询结果的对比
Django models .all .values .values_list 几种数据查询结果的对比
- django models数据类型
Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...
- django models 类型整理 version:1.8.3
django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...
- django models的点查询/跨表查询/双下划线查询
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...
- Django models中关于blank与null的补充说明
Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...
随机推荐
- wordpress调用自定义菜单
wordpress要调用自定义菜单首先要注册菜单,将代码添加到主题文件夹下的function.php中,比如wordpress自带主题2019的定义如下 // This theme uses wp_n ...
- SparkSQL读写外部数据源-jext文件和table数据源的读写
object ParquetFileTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() ...
- SpringBoot使用thymeleaf案例
1 编写application.properties文件 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=. ...
- screen对象及属性(availWidth、availHeight)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- gitbase cube.js schema 文件项目
cube.js 进行数据分析,需要我们编写schema 文件,但是因为gitbase 的原因没发进行自动生成,而且还有些问题 所以做了一些简单的修改 注意直接使用cube-cli 0.9.0 可以自动 ...
- gj的zabbix客户端开机自启动设置
查看是否自启动 配置chkconfig 启动服务
- 1-开发共享版APP(源码介绍)-BUG修复
这一系列文章将介绍APP的源码,这一节作为所有BUG问题修复! https://www.cnblogs.com/yangfengwu/category/1512162.html //开发共享版A ...
- 81: luogu3370 hash
hash 模板题 #include <bits/stdc++.h> using namespace std; #define ULL unsigned long long const UL ...
- 2017.10.1 国庆清北 D1T1 zhx的字符串题
题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...
- win服务器 文件上传下载出现“未指定的错误” 解决方法汇总
环境 WIN平台IIS服务器 经常出现于ASPX页面 汇总 1.权限问题 出现场景 : 基于ACCESS数据库 原因解析 : 1.首先需要排除自身问题,例如建表使用关键字,格式错误,插入数据与 ...