首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

强制Django Admin正确调用.update()而不是.save(),以避免触发用于创建对象的检查

Django Admin是Django框架提供的一个强大的后台管理工具,可以方便地管理网站的数据和功能。在使用Django Admin时,我们可以通过调用.save()方法来保存对象的修改或创建新的对象。然而,有时候我们希望只更新对象的部分属性,而不是保存整个对象,这时就可以使用.update()方法。

.update()方法是Django提供的一个高效的更新数据库记录的方法,它可以直接在数据库层面执行更新操作,而不需要加载整个对象到内存中。相比之下,.save()方法会加载整个对象到内存中,并执行一系列的检查和操作,包括创建对象的检查。

强制使用.update()而不是.save()的主要目的是为了提高性能和减少资源消耗。当我们只需要更新对象的部分属性时,使用.update()可以避免不必要的操作,减少数据库的访问次数和数据传输量,从而提高系统的响应速度和吞吐量。

在Django Admin中,我们可以通过重写模型的save_model()方法来实现强制使用.update()而不是.save()。具体步骤如下:

  1. 打开admin.py文件,找到对应的模型注册代码。
  2. 在模型注册代码中定义一个自定义的ModelAdmin类,并继承自admin.ModelAdmin
  3. 在自定义的ModelAdmin类中重写save_model()方法。
  4. save_model()方法中使用.update()方法来更新对象的属性。

下面是一个示例代码:

代码语言:txt
复制
from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        # 更新对象的属性
        YourModel.objects.filter(pk=obj.pk).update(**form.cleaned_data)

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,我们重写了save_model()方法,并使用.update()方法来更新对象的属性。通过这种方式,我们可以确保在Django Admin中正确调用.update()而不是.save(),从而避免触发用于创建对象的检查。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云服务器CVM、腾讯云容器服务TKE、腾讯云对象存储COS、腾讯云人工智能AI Lab等。你可以在腾讯云官网上找到这些产品的详细介绍和使用说明。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django 1.8 官方文档翻译: 2-3-1 模型实例参考

调用save() 之前无法知道ID 值,因为这个值是通过数据库不是Django 计算。...如果你手工赋值一个自增主键值,请确保不要使用一个已经存在主键值!如果你使用数据库中已经存在主键值创建一个新对象Django 将假设你正在修改这个已存在记录不是创建一个新记录。...强制使用INSERT 或UPDATE 在一些很少见场景中,需要强制save() 方法执行SQL INSERT 不能执行UPDATE。或者相反:更新一行不是插入一个新行。...Django 几乎始终会完成正确事情,覆盖它将导致错误难以跟踪。这个功能只用于高级用法。 使用update_fields 将强制使用类似force_update 更新操作。...通过将更新基于原始字段不是显式赋予一个新值,这个过程可以避免竞态条件而且更快。Django 提供F 表达式 用于这种类型相对更新。

1.9K10

37.Django1.11.6文档

算法使用SELECT来判断是否存在需要更新行。 算法直接尝试使用UPDATE。 在某些少见情况下,一个已存在行UPDATE操作对Django不可见。 ...如果您表单集包含formset.save_m2m(),您还需要调用ManyToManyField,确保多对多关系正确保存。...如果save_as是True,“保存并添加另一个”将被替换为创建对象(使用新ID)不是更新“另存为”按钮现有的对象。 默认情况下,save_as 设置为False。...请注意,使用此技术时,不会触发m2m_changed信号。 这是因为,就管理而言,through只是一个具有两个外键字段不是多对多关系模型。...写入动作函数 首先,我们需要定义一个函数,当在Admin 界面上触发该Action 时候调用

24.3K80

django 1.8 官方文档翻译: 2-5-6 多数据库

如果某个方法缺失,在做相应检查Django 将忽略该路由。 Hints Hint 由数据库路由接收,用于决定哪个数据库应该接收一个给定请求。...如果一个对象没有主键,Django 将把它当做一个新对象,这将避免second数据库上数据丢失: >>> p = Person(name='Fred') >>> p.save(using='first...选择一个数据库用于删除表单 默认情况下,删除一个已存在对象调用将在与获取对象时使用相同数据库上执行: >>> u = User.objects.using('legacy_users').get(username...为了保持两个对象之间关联,Django 需要知道关联对象主键是合法。如果主键存储在另外一个数据库上,判断一个主键合法性不是很容易。...如果你正在使用Postgres、Oracle或者MySQ InnoDB,这是数据库完整性级别的强制要求 —— 数据库级别的主键约束防止创建不能验证合法性关联。

1.5K20

基于 Django 信号机制实现类似触发效果

触发触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性一种方法,它是与表事件相关特殊存储过程,它执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作...触发器经常用于加强数据完整性约束和业务规则等。...触发优点 触发器可通过数据库中相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义约束更为复杂约束。...触发器也可以评估数据修改前后表状态,并根据其差异采取对策。一个表中多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同对策响应同一个修改语句。...下面我们就通过创建一个基于 Django 学生信息管理系统来通过信号机制实现类似触发效果。

2.4K30

Django之ORM数据库

上面的sqlite数据库下db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库用户名和密码。...注意: 第二种方式修改不能用get原因是:update是QuerySet对象方法,get返回是一个model对象,它没有update方法,filter返回是一个QuerySet对象(filter...在“插入和更新数据”小节中,我们有提到模型save()方法,这个方法会更新一行里所有列。 某些情况下,我们只需要更新行里某几列。...为了避免这个,可以用exists()方法来检查是否有数据: obj = Book.objects.filter(id=4) # exists()检查可以避免数据放入...ret1.publisher是一个对象,不是一个queryset集合 # 反向查找 ret2=models.Publish.objects.last() print(ret2

2.6K10

Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

、更新、删除对象,下文将介绍如何使用这些API(一个网页应用为例展开) 首先是创建表模型类 先分析一下他们表关系,会有助于理解下面的内容 from django.db import models....save() 方法( .save() 没有返回值) 保存修改对象 想要保存一个已经改动过对象调用 .save() 方法即可(更新一条记录) 下面是一个 Blog 表模型类实例化对象...." --> Manager 不能通过 Blog 实例来访问 注意: Managers 只能通过表模型类来访问,不是模型类实例(对象) 请你一定要分清楚你当前使用是 表层面 操作还是 记录层面...等 pikle 序列化时 触发了 __repr__() 或者 __str__() 时 触发了 __len__() 或者 len() 时 如果你想获取满足条件数据条数不需要其他信息,可以使用 .count...下面这些 QuerySet 方法会直接触发数据库操作然后返回一些其他东西,不是 QuerySet 这些方法不会使用 cache 缓存,相反,每次调用他们都会执行数据库操作 # 常见几个 .

2.9K20

第15篇-使用Django进行ElasticSearch简单方法

前一段时间,我在Django项目上工作,想实现快速自由文本搜索。我决定使用NoSQL数据库,不是使用常规数据库来执行此搜索功能(例如MySQL或PostgreSQL)。...那就是我发现ElasticSearch时候。 ElasticSearch为您数据索引文档,不是像常规关系数据库那样使用数据表。这样可以加快搜索速度,并提供其他常规数据库无法获得其他好处。...要检查其启动和运行是否正确,请打开一个新终端窗口并运行以下 curl 命令: curl -XGET http:// localhost:9200 响应应该是这样: { “ name”:“ 6xIrzqq...然后,您将生成器传递给常规数据库中 actions= 所有 BlogPost 对象并对其进行迭代,并 .indexing() 在每个对象调用方法。为什么要使用发电机?...索引新保存实例 接下来,您需要添加一个信号, .indexing() 在用户每次保存新博客帖子时保存每个新实例上触发

5.2K00

Django-guardian实现对象级别的权限控制

异常,不是返回一个空django.http.HttpResponseForbidden GUARDIAN_RENDER_403和GUARDIAN_RAISE_403不能同时设置为True。...,将会尝试渲染403响应,不是返回空django.http.HttpResponseForbidden。...这可能导致guardian每次migrate之后尝试创建匿名用户问题。将使用此设置指向功能来获取要创建对象。一旦获取,save方法将在该实例上被调用。...app名字(不知道什么) ObjectPermissionChecker guardian.core.ObjectPermissionChecker用于检查特定对象用户/组权限。...django-guardian随附两个装饰器,这可能有助于简单对象权限检查,但请记住,在装饰视图被调用之前,这些装饰器会触发数据库——这意味着如果在视图中进行类似的查找,那么最可能一个(或更多,取决于查找

3.2K30

一个数据库事务 Bug 引发惨剧

return payout 这个函数简化版本可以创建一个付款流程新实例并返回它。在现实应用中,这个函数会验证输入并创建几个相关对象。...为了确保所有相关对象都能和付款流程实例一同创建,我们使用了一个数据库事务。 新创建这个实例现在代表系统中一个付款流程,其中付款模块负责完成付款操作。...当信号接收器被触发时,它会首先检查这是否属于它自己付款操作。如果答案是肯定,接收器会获取相关对象(在这里就是给商家一笔付款),并向用户发送通知。...触发一个异步任务不是发送信号 这会遇到与信号相同问题。批量流程失败时任务已被触发,消息将被发送出去。...4对 Django 信号思考 就像这个故事里提到Django 信号可用于实现模块之间交互,而无需在它们之间创建显式依赖项。

92820

django 1.8 官方文档翻译: 1-2-2 编写你第一个Django应用,第2部分

通常情况下,你每次修改过一个文件后开发 服务器都会自动载入,但是创建一个新文件却不会触发自动载入逻辑。...修改正确后再重启载入页面 来检查值是否正确。 分别点击 “Today” 和 “Now” 快捷方式来修改 “Date published” 值。...使用了 TabularInline 后(不是 StackedInline) ,基于表格式下相关 对象被显示更紧凑了: 需要注意是有个额外 “Delete?”...我们 poll 应用不是很复杂并不需要自定义管理模板。但是如果它变得更复杂 而且为了一些功能需要修改 Django 标准管理模板,修改应用模板将是更 明智选择,不是修改项目模板。...这个变量包含了每一个 已安装 Django 应用。你可以通过你认为最好方法硬编码链接到特定对象管理页面,不是使用默认模板。

2.5K40

Django 1.10中文文档-第一个应用Part2-模型和管理站点

对于极简主义者来说:INSTALLED_APPS包含默认应用用于常见场景,但并不是每个人都需要它们。...如果你有兴趣,你也可以运行python manage.py check;这将检查项目中任何问题,不进行迁移或触摸数据库。...使用如下命令来调用Python shell: python manage.py shell 我们使用上述命令不是简单地键入“python”进入python环境,是因为manage.py 设置了DJANGO_SETTINGS_MODULE...Django解决了为网站管理员创建统一界面编辑内容问题。管理网站不打算供网站访问者使用。 创建管理用户 首先,我们需要创建一个可以登录到管理网站用户。...它就是我们先前创建一个question,并且通过str方法帮助,显示了较为直观信息,不是一个冷冰冰对象类型名称。 ? 点击What’s up?进入编辑界面: ?

2.3K60

三、模型(一)

Admin中该字段提示信息 choices Admin中显示选择框内容,用不变动数据放在内存中从而避免跨表操作 如:...Django Admin错误信息会优先根据Admiin内部ModelForm错误信息提示,如果都成功,才来检查Model字段并显示指定错误信息 b....当你使用Django modle API创建对象Django并未将对象保存至数据库内,除非你调用`` save()`` 方法。...当你在Python中处理Unicode对象时候,你可以直接将它们混合使用和互相匹配不必去考虑编码细节。 Django 在其内部各个方面都使用到了 Unicode 对象。...更改某一指定列,我们可以调用结果集(QuerySet)对象update()方法: 示例如下: >>> Publisher.objects.filter(id=52).update(name='Apress

4.5K90

Django 3.1 官网学习路线

Django 编写每个应用程序都由一个遵循特定约定 Python 包组成。Django 附带一个工具,它可以自动生成应用程序基本目录结构,因此您可以专注于编写代码,不是创建目录。...有了它,Django 可以: 为这个应用程序创建一个数据库模式(创建表语句)。 创建用于访问问题和选择对象 Python 数据库访问 API。...迁移功能非常强大,它允许您在开发项目时随着时间推移更改模型,不需要删除数据库或表并创建新表——它专门用于实时升级数据库,不会丢失数据。...使用timezone.now () #不是date .date .now(),它将做正确事情 In [3]: from django.utils import timezone In [4]: q...如果“Date published”值与教程 1 中创建问题时时间不匹配,这可能意味着您忘记为 TIME_ZONE 设置正确值。更改它,重新加载页面并检查正确值出现。

8.1K10

web开发框架之Django基础

执行 tree,结果显示如下目录结构 admin.py 文件跟网站后台管理站点配置相关 apps.py 文件用于配置当前子应用相关信息...文件用于开发测试用例,编写单元测试 views.py 文件用于编写Web应用视图 创建完子应用时需要进行三个步骤:...Django中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾相同路径时, Django会把用户重定向到斜线/结尾路径上...当调用如下过滤器方法时,Django会返回查询集(不是简单列表): all():返回所有数据。...注意:一旦为模型类指明自定义过滤器后,Django不再生成默认管理对象objects。 自定义管理器类主要用于两种情况: 1.

6.1K10

django 1.8 官方文档翻译:13-1-2 使用Django认证系统

User对象 User对象是认证系统核心。它们通常表示与你站点进行交互用户,并用于启用限制访问、注册用户信息和关联内容给创建者等。...在Django认证框架中只存在一种类型用户,因此诸如'superusers'或管理员'staff'用户只是具有特殊属性集user对象不是不同类型user对象。...(username='john') >>> u.set_password('new password') >>> u.save() 如果你安装了Django admin,你还可以在认证系统admin页面修改...权限缓存 ModelBackend在第一次需要访问User对象检查权限时会缓存它们权限。这对于请求-响应循环还是比较好,因为在权限添加进来之后并不会立即检查(例如在admin中)。...注意,user_passes_test() 不会自动检查 User 是否是不是匿名对象

4.6K20

如何使用Django构建现代Web应用程序来管理客户信息并在Ubuntu 18.04上进行反应

您将使用React作为UI库,不是构建使用内置模板引擎Django应用程序,利用其虚拟文档对象模型(DOM),声明性方法和快速呈现数据更改组件。...模型定义应用程序数据字段和行为,视图使我们应用程序能够正确处理Web请求并返回所需响应。...Paginator是一个内置Django类,它将数据列表分页到页面中,并提供访问每个页面的项目的方法。 如果是POST请求,则该方法序列化接收客户数据,然后调用save()序列化程序对象方法。...request.method字段中检查验证请求方法,并根据其值调用正确逻辑: 如果是GET请求,则客户数据将被序列化并使用Response对象发送。...如果是PUT请求,则该方法为新客户数据创建序列化程序。接下来,它调用save()创建序列化程序对象方法。最后,它发送一个带有更新客户Response对象

13.9K83
领券