Django: user.save() 不保存更新到扩展自
Django: user.save() not saving updates to extended from
我正在制作一个银行交易系统,我希望用户提取金额并将其存入他们的帐户。我以扩展形式制作了余额字段,因为默认的 UserCreationForm 没有余额字段。请看下面的代码:
views.py
@login_required(redirect_field_name='login-page')
def dashboard(request):
if request.method == 'POST':
withdrawAmount = request.POST.get('withdraw')
depositAmount = request.POST.get('deposit')
print(withdrawAmount, depositAmount)
user = User.objects.get(username=request.user.username)
print(user)
if withdrawAmount == None and depositAmount == None:
return redirect('dashboard')
messages.info(request, "Amount empty!")
elif depositAmount == None:
user.account.balance = user.account.balance - int(withdrawAmount)
user.save()
elif withdrawAmount == None:
pass
customer = User.objects.all()
return render(request, 'bankapp/dashboard.html', {'customer': customer})
models.py
from django.db import models
from django.contrib.auth.forms import User
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
balance = models.IntegerField()
def __str__(self):
return self.user.username
forms.py
from django import forms
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm, User
from .models import Account
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=128, help_text='Input valid email')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
class AccountForm(forms.ModelForm):
class Meta:
model = Account
fields = ('balance',)
代码运行完美,没有错误,但数据库中的余额没有更新。任何帮助将不胜感激!
您必须保存正确的对象。
您正在保存 user
对象,但您必须保存 account
对象,因此您需要:
user.account.balance = user.account.balance - int(withdrawAmount)
user.account.save()
这应该有效。
我正在制作一个银行交易系统,我希望用户提取金额并将其存入他们的帐户。我以扩展形式制作了余额字段,因为默认的 UserCreationForm 没有余额字段。请看下面的代码:
views.py
@login_required(redirect_field_name='login-page')
def dashboard(request):
if request.method == 'POST':
withdrawAmount = request.POST.get('withdraw')
depositAmount = request.POST.get('deposit')
print(withdrawAmount, depositAmount)
user = User.objects.get(username=request.user.username)
print(user)
if withdrawAmount == None and depositAmount == None:
return redirect('dashboard')
messages.info(request, "Amount empty!")
elif depositAmount == None:
user.account.balance = user.account.balance - int(withdrawAmount)
user.save()
elif withdrawAmount == None:
pass
customer = User.objects.all()
return render(request, 'bankapp/dashboard.html', {'customer': customer})
models.py
from django.db import models
from django.contrib.auth.forms import User
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
balance = models.IntegerField()
def __str__(self):
return self.user.username
forms.py
from django import forms
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm, User
from .models import Account
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=128, help_text='Input valid email')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
class AccountForm(forms.ModelForm):
class Meta:
model = Account
fields = ('balance',)
代码运行完美,没有错误,但数据库中的余额没有更新。任何帮助将不胜感激!
您必须保存正确的对象。
您正在保存 user
对象,但您必须保存 account
对象,因此您需要:
user.account.balance = user.account.balance - int(withdrawAmount)
user.account.save()
这应该有效。