Expressões F para atualizações atômicas
Atualize colunas usando seus próprios valores com segurança
Expressões F para atualizações atômicas é uma aula grátis de Django Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Django Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Django Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
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. 💾
Perguntas Frequentes
A aula “Expressões F para atualizações atômicas” é grátis?
Sim — o texto completo de “Expressões F para atualizações atômicas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Django Academy, atualize para CoddyKit PRO. O curso de Django Academy inclui 4 aulas no total.
O que vou aprender em “Expressões F para atualizações atômicas”?
Atualize colunas usando seus próprios valores com segurança Você pratica Django Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Django Academy?
Nenhuma experiência prévia é necessária. Django Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Expressões F para atualizações atômicas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Django Academy?
Sim. Cada aula de Django Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- aggregate versus annotate
- Expressões F para atualizações atômicas
- Objetos Q para filtros complexos
- Agregação condicional com Case/When