Django:提交表单时修改模型字段值

Gar*_*ett 0 python django

每个用户都有一个模型字段,用于跟踪我们网站上的分数.每次用户做一些我想要添加或减去他们的分数.

在这种特殊情况下,我想在我的网站上发布帖子时更改用户分数.我可以访问用户的分数,但不能修改它.这是我到目前为止:

def createPost(request):
    user = UserProfile.objects.get(user=request.user)
    current_score = user.user_score

    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            ...
            user.user_score = current_score - 1
            ...
    else:
        form = PostForm()
    return render(request,'feed/userpost_form.html',{'form':form})
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,发布帖子工作正常,只是没有修改用户的分数.另外,我正在使用Django 1.11

and*_*abs 5

你错过了 user.save()

顺便说一下另一种方法可能是:

from django.db.models import F
UserProfile.objects.filter(user=request.user).update(user_score=F('user_score')+1)
Run Code Online (Sandbox Code Playgroud)

上述方法的重要特征是:

F()的另一个有用的好处是让数据库 - 而不是Python - 更新字段的值可以避免竞争条件. https://docs.djangoproject.com/en/1.8/ref/models/expressions/#avoiding-race-conditions-using-f