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的更多相关文章

  1. How to manage concurrency in Django models

    How to manage concurrency in Django models The days of desktop systems serving single users are long ...

  2. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  3. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  4. Django models Form model_form 关系及区别

    Django models Form model_form

  5. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  6. django models数据类型

    Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...

  7. django models 类型整理 version:1.8.3

    django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...

  8. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  9. Django models中关于blank与null的补充说明

    Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...

随机推荐

  1. wordpress非管理员看不到数据需有manage_options权限

    今天ytkah在调试一个新功能的时候发现wordpress非管理员看不到一些插件的数据,比如editor,添加一些用户权限还是不行,不得已直接把administrator所有的权限都添加测试一遍,最后 ...

  2. LeetCode 802. Find Eventual Safe States

    原题链接在这里:https://leetcode.com/problems/find-eventual-safe-states/ 题目: In a directed graph, we start a ...

  3. Mscordacwks.dll/SOS.dll 调试归档

    找到个好东西 为什么要归档 此存档提供帮助,并可能提供对以下问题的答案 是否可以使WinDBG在符号存储中找到mscordacwks.dll?, Windbg需要不同版本的mscordacwks.dl ...

  4. WinDbg常用命令系列---!heap

    !heap 简介 !heap扩展显示堆使用信息.控制堆管理器中的断点.检测泄漏的堆块.搜索堆块或显示页堆信息.此扩展支持段堆和NT堆.使用!heap没有参数列出所有堆及其类型的堆. 使用形式 !hea ...

  5. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  6. Vue中插槽slot的使用

    插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题在这里就点出来了,是显示不显示和怎样显示. 由于插槽是一块模板,所 ...

  7. iphone中input按钮设置disabled属性出现灰色背景没有显示问题

    在项目中发现发送验证码的按钮,在点击后添加disabled属性后,iphone手机中出现disabled属性的默认背景颜色没有显示,反而直接显示它下面的父级元素的白色 点击前 点击后 倒计时的按钮消失 ...

  8. manjaro系统的回滚操作

    作为linux系统的爱好者,自从使用linux后,就喜欢追求新的软件,连系统都换成了滚动升级的版本.manjaro基于arch linux,同时也是kde的支持系统,升级非常频繁.使用了几年,很少碰到 ...

  9. koa 搭建模块化路由/层级路由

    搭建node项目目录以及基本的文件 初始化package.json文件 执行下面命令生成package.json文件 npm init --yes 创建项目目录 创建路由目录routes,存放静态资源 ...

  10. ICEM-结构化网格interface的做法

    原视频下载地址:http://yunpan.cn/cLHTCfRVNmihZ  访问密码 2ead