首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django自定义保存方法和更新

Django自定义保存方法和更新
EN

Stack Overflow用户
提问于 2014-04-09 12:02:00
回答 1查看 310关注 0票数 0

我有一个定制的save()方法,它检查对象的“活动”字段等于2,然后给所有子代字段(使用MPTT)相同的编号。

代码语言:javascript
运行
AI代码解释
复制
def save(self):
  if self.active == 2:
  self.get_descendants().update(active=2)

  super(Post, self).save()

现在,当我更新()我的模型时,我希望这段代码也能工作。我应该尝试制定自定义更新方法吗?该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 14:07:07

一个简单的解决方法是执行原始的更新,然后使用get_queryset_descendants()为所有的后代做一个额外的更新。完整的代码如下:

代码语言:javascript
运行
AI代码解释
复制
qs = <some queryset>
qs.update(**values)
descendants = MyModel.objects.get_queryset_descendants(qs.filter(active=2))
descendants.update(active=2)

或者,如果您只想更新active属性,可以一次完成:

代码语言:javascript
运行
AI代码解释
复制
qs = <some queryset>
descendants = MyModel.objects.get_querset_descendants(qs, include_self=True)
descendants.update(active=2)

当然,这可以包装在update函数中。看起来是这样的:

代码语言:javascript
运行
AI代码解释
复制
from django.db import transaction
from django.db.models.query import QuerySet

class MyModelQuerySet(QuerySet):
    def update(self, **kwargs):
        with transaction.atomic(): # for Django >= 1.6
        ####### OR ######
        with transaction.commit_on_succes(): # for Django <= 1.5
            r = super(MyModelQuerySet, self).update(**kwargs)
            descendants = self.model.objects.get_query_set_descendants(self.filter(active=2))
            descendants.update(active=2)
        return r

如果第二次更新失败,with transaction.atomic()with transaction.commit_on_succes()将阻止第一次更新保存,这是为了确保在第二次更新出错时数据库级别的完整性。

您应该检查当前版本Django的文档,了解如何在自定义管理器(即mppt.managers.TreeManager)中使用自定义查询集。

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

https://stackoverflow.com/questions/22972842

复制
相关文章
Django 模型中自定义Manager和模型方法
在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个manager,你可以创建自定义manager以定制数据库的访问. 这里有两个方法创建自定义manager:添加额外的manager;修改manager返回的初始Queryset.
菲宇
2019/06/13
2.8K0
django 保存数据时重写?
需求: class Article(Model.model): title = '' title_hash = hash(title) 实现方式1: def save(self, *args, **kwargs): self.title_hash = hash(self.title) super(Article, self).save(*args, **kwargs) 实现方式2: def save_title_hash(self): title_hash = has
BigYoung小站
2020/05/05
9960
django-表单之数据保存(七)
models.py class Student(models.Model): #字段映射,数据库中是male,female,后台显示的是男,女 choices={ ('male',"男"), ('female','女'), } #创建数据库中的字段 name=models.CharField(verbose_name='姓名',max_length=20,unique=True) age=models.CharField(ver
西西嘛呦
2020/08/26
9300
hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
在工程中通过spring aop的方式配置事务,使用hibernate做持久化。在代码实现中使用hibernate persit()方法插入数据到数据库,使用hibernate update()方法更新数据。问题是执行这两个方法没有报错,但是也没有插入数据或者更新数据。
用户3148308
2018/09/13
2.4K0
hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
Django之分页组件和自定义分页
Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。
菲宇
2019/06/13
1K0
Django之分页组件和自定义分页
配置django图片上传与保存展示
近来在研究django,发现有好多好玩的功能,比如图片上传,以前处理这个比较麻烦,现在我们来看看如何来处理图片上传与保存 1.在数据库设计的时候需要配置upload_to image = models.ImageField(upload_to="org/%Y/%m", verbose_name=u"Logo", max_length=100) 2.在settings.py中配置media MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR,'me
程序员同行者
2018/07/02
1.9K0
Django更新数据模型
在更新模型的时候遇到问题,网上有说删app下migrations目录的,有说要删数据库django_migrations表的, 还有的要在数据库中更改字段的。
Spaceack
2020/11/04
1.1K0
Django批量更新多个属性
有时候我们需要同时(一次性)更新某个用户的多条属性。 1. 用户model如下: class User(models.Model): UID = models.CharField('员工uid', max_length=200,) name = models.CharField('员工名字', max_length=200,) mobile = models.CharField('手机号', max_length=200,) mail = models.EmailField(u'邮箱', max_lengt
BigYoung小站
2020/05/04
2.1K0
Django自定义模板标签和过滤器
在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py。
py3study
2020/01/16
7350
禁用WordPress自动保存(AutoSave)和历史版本(Revisions)方法
1.禁用历史版本(Revisions)方法 在wp-config.php中加入如下代码: define(‘WP_POST_REVISIONS’, false);
魏杰
2022/12/23
4060
Django自定义分页
分页 自定义分页 稳扎稳打版 def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: # 将取出的page转换为int类型 page_num = int(page_num) except Exception as e: # 当输入的页码不是正经数字的时候 默认返回第一页的数据 page_num = 1 #
py3study
2020/01/19
1.5K1
Django自定义分页
Django 自定义后台
  Django 提供了相应的接口供我们自定义 Django 自带的后台管理应用。
小孙同学
2022/01/17
6750
Django 自定义后台
Django自定义命令
在commads目录下面创建我们的命令文件,命令的名称就是命令文件的名称,命令文件内部的基本结构如下:
渔父歌
2019/10/17
7310
Django -自定义命令
Models 定义 Category Page # rango/models.pyfrom django.db import modelsclass Category(models.Model): title = models.CharField(max_length=64, unique=True) pinyin = models.CharField(max_length=128, null=True, blank=True) description = models.TextFi
IT架构圈
2018/06/01
5870
python 和 django 学习资料收集(2020-4-25 更新)
Django awesome(Django 优秀资源大全) https://github.com/haiiiiiyun/awesome-django-cn(源地址) https://github.com/yinzhuoqun/awesome-django-cn(备用地址) v3.2.x LTS https://docs.djangoproject.com/zh-hans/3.2/(官方-部分中文) v2.2.x LTS https://docs.djangoproject.com/zh-hans/2.2/i
卓越笔记
2023/02/18
3650
Redis保存PHP Session方法
Redis保存session用的命令是setex,用redis-cli monitor实时监测可以检测到。
wangxl
2018/07/27
5.6K1
Redis保存PHP Session方法
点击加载更多

相似问题

Django自定义保存和更新

310

Django自定义保存方法

10

Django:用自定义保存方法更新表单中的对象

13

Django inlineformset -自定义保存方法

10

Django :通过重写保存方法更新模型

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文