【问题标题】:Django: Modify model field value when form is submittedDjango:提交表单时修改模型字段值
【发布时间】:2018-03-07 18:54:19
【问题描述】:

我为每次使用都有一个模型字段,用于跟踪他们在我的网站上的得分。每次用户做一些事情时,我都想从他们的分数中增加或减少。

在这种特殊情况下,我想在用户在我的网站上发布帖子时更改他们的得分。我可以访问用户的分数,但不能修改它。这是我目前所拥有的:

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})

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

【问题讨论】:

  • user.save() 不是不见了吗?
  • @andi 是的,就是这样。我的小疏忽。谢谢
  • 注意竞争条件。

标签: python django


【解决方案1】:

你错过了user.save()

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

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

上述方法的重要特点是:

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

【讨论】:

猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 2021-10-14
  • 2017-04-09
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多