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'), ...
随机推荐
- python获取参数列表
def f(a=1, b=2, c=3): print(locals())#在函数内获取 #使用inspect模块,简单方便 python2.7: import inspectinspect.geta ...
- postgres常用运维sql
1.查看数据库大小 select pg_database_size('log_analysis'); postgres=# select pg_database_size('postExpress') ...
- Spring源码窥探之:@Profile
Spring为我们提供的多环境启动 1. 配置类,注入三个不同环境的数据源,并加上注解 /** * description: 以下准备了三套不同环境的数据源 * * @author 70KG * @d ...
- pycharm激活2018(终极解决办法)
1.将“0.0.0.0 account.jetbrains.com”中的内容添加到hosts文件中,hosts路径为:C:\Windows\System32\drivers\etc 2.打开http: ...
- ssh2
UserBiz public interface UserBiz { public List<User> list(User user); public int add(User user ...
- 微软安全技术Shim
Shim是微软系统中一个小型函数库,用于透明地拦截API调用,修改传递的参数.自身处理操作.或把操作重定向到其他地方.Shim主要用于解决遗留应用程序在新版Windows系统上的兼容性问题,但Shim ...
- Serlvet开发
javaweb学习总结(五)——Servlet开发(一) 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口 ...
- ICEM-哑铃
原视频下载地址:https://pan.baidu.com/s/1kVBKJbT ;密码: jqeh
- Server 2003 操作系统位数
安装好电脑系统,如何查看windows 2003/xp/win7是64位还是32位? 方法/步骤 第一种方法:桌面上鼠标右键单击“计算机”(我的电脑) 在弹出的快捷菜单中选择“属性”,如果看到64的字 ...
- Fabric.js canvas 图形库
1.github地址: https://github.com/fabricjs/fabric.js 2.简述 Fabric.js将canvas的编程变得简单.同时在canvas上添加了交互.交互包括: ...