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
相关产品推荐
相关产品推荐

