You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django投票应用中IntegerField投票数自增无效问题求助

修复Django投票数无法自增的问题

基础修复:调用save()同步数据库变更

你当前仅修改了内存中option实例的votes字段值,但没有将变更同步到数据库。在修改字段后必须调用save()方法才能让变更生效:

option.votes += 1
user = UserProfile.objects.get(user=request.user)
option.voters.add(user)
option.save()  # 新增这行,将投票数变更写入数据库

更安全的并发处理方案:使用F表达式

如果存在多用户同时投票的场景,直接votes +=1可能因竞态条件导致计数不准确。Django的F()表达式可以让数据库层面直接执行自增操作,避免这类问题:

from django.db.models import F

# 用F表达式让数据库直接处理自增,避免内存层面的竞态问题
option.votes = F('votes') + 1
user = UserProfile.objects.get(user=request.user)
option.voters.add(user)
option.save()

# 若后续需要立即获取更新后的votes值,需刷新实例
option.refresh_from_db()

也可以用更简洁的update()方法(适合无需操作实例其他属性的场景):

from django.db.models import F

option.update(votes=F('votes') + 1)
user = UserProfile.objects.get(user=request.user)
option.voters.add(user)

内容的提问来源于stack exchange,提问作者O.G Bellz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:07:02