0Pricing
Django Academy · 课时

使用 F 表达式进行原子更新

安全地使用列自身的值更新列

使用 F 表达式进行原子更新 是 CoddyKit 上的免费 Django Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Django Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Django Academy 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

The Read-Modify-Write Trap

Loading a value, changing it in Python, then saving creates a race: two requests can read the same number and overwrite each other.

Enter F Expressions

An F expression refers to a column by name, letting the database do the math itself instead of round-tripping the value to Python.

from django.db.models import F

Increment in the Database

Use F to add to a column based on its own current value, computed safely inside a single SQL statement.

Product.objects.filter(id=1).update(stock=F("stock") - 1)

Why This Is Atomic

The whole change runs as one UPDATE, so concurrent requests stack correctly instead of clobbering one another's results.

Update Many Rows at Once

Because F runs in SQL, you can apply a change across a whole queryset in one query, like giving every product a raise.

Product.objects.update(price=F("price") * 1.1)

Compare Two Columns

F expressions also shine in filters, letting you compare one column against another directly in the query.

Order.objects.filter(shipped__gt=F("ordered"))

Refresh After update()

An in-memory instance does not change when you run update, so call refresh_from_db to pull the new value back.

p.refresh_from_db()

F on a Single Instance

You can also assign an F expression to a field and then save; Django turns it into the same column-aware SQL.

p.stock = F("stock") - 1
p.save()

Arithmetic Across Fields

F values support full arithmetic, so you can combine columns, for example storing a total computed from price and quantity.

Line.objects.update(total=F("price") * F("qty"))

A Common Gotcha

After saving with an F expression, the Python attribute still holds the expression object, not the number, until you refresh.

When to Reach for F

Pick F whenever an update depends on a column's current value, especially counters, balances, and stock that many requests touch.

Quick Check

Two checkouts hit the same product at once. Which approach avoids losing a decrement?

Recap

F expressions push math into the database for atomic, race-free updates across one or many rows. Just refresh your instance afterward. 💾

常见问题解答

「使用 F 表达式进行原子更新」课时是免费的吗?

是的 — 「使用 F 表达式进行原子更新」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Django Academy 课程的其余内容,请升级到 CoddyKit PRO。 Django Academy 课程共包含 4 节课。

「使用 F 表达式进行原子更新」这节课中我会学到什么?

安全地使用列自身的值更新列 你通过在浏览器中直接运行的动手代码来练习 Django Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Django Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Django Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 F 表达式进行原子更新」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Django Academy 课中编写并运行代码吗?

能。每节 Django Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. aggregate 与 annotate
  2. 使用 F 表达式进行原子更新
  3. 使用 Q 对象进行复杂过滤
  4. 使用 Case/When 进行条件聚合
← 返回 Django Academy