Я хочу давать пользователям десять монет каждый раз, когда они заполняют одну форму

Я хочу давать пользователям десять монет каждый раз, когда они заполняют одну форму, поэтому я попробовал этот код выше и показал эту ошибку

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, к которому вам нужно было бы получить доступ.

Вы можете вызвать это, например, в вашей FormView'form_valid:

class MoneyFormView(FormView):
    # ...

    def form_valid(self, request):
        give_coins(request.user, 10)
        return super().form_valid(request)
Вернуться на верх