Выражения F для атомарных обновлений
Безопасно обновляйте столбцы, используя их собственные значения
«Выражения F для атомарных обновлений» — бесплатный урок Django Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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 FIncrement 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 для атомарных обновлений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выражения F для атомарных обновлений»?
Безопасно обновляйте столбцы, используя их собственные значения Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Выражения F для атомарных обновлений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- aggregate и annotate
- Выражения F для атомарных обновлений
- Объекты Q для сложных фильтров
- Условная агрегация с Case/When