我想给用户每填写一个表格十个硬币

I want to give users ten coins each time they fill out one form

我想在用户每次填写一张表格时给他们十个硬币,所以我尝试了上面的代码并显示了这个错误

TypeError at /profile
unsupported operand type(s) for +=: 'DeferredAttribute' and 'int'
error in views.py in line += 10

models.py

class User(AbstractUser):
    user_pic = models.ImageField(upload_to='img/',default="",null=True, blank=True)
    coins = models.IntegerField(default=100)
    def gives_user_coins_after_create(sender, instance, created, **kwargs):
        if created:
            profile = instance.User.profile
            profile.coins += 10
            profile.save()

views.py

@login_required(login_url='accounts/login/')
def profile(request):
    # Gives the user 10 coins for fill up one form
    profile = get_user_model()
    profile.coins += 10
    profile.save()

    return render(request,'account/profile.html')

我尝试了很多代码但没有任何效果,请提供任何想法或帮助

如果上面显示的 User 模型是您的 AUTH_USER_MODEL 那么您真正需要的是

def give_coins(user, count):
    user.coins = F('coins') + count
    user.save(update_fields=('coins',))
    user.refresh_from_db(fields=('coins',))

(使用 F() 来避免(某些)竞争条件);没有 .profile 您需要访问的内容。

然后您可以在例如你的 FormViewform_valid:

class MoneyFormView(FormView):
    # ...

    def form_valid(self, request):
        give_coins(request.user, 10)
        return super().form_valid(request)