为了账号安全,请及时绑定邮箱和手机立即绑定

django deposit() 缺少 1 个必需的位置参数:'amount'

django deposit() 缺少 1 个必需的位置参数:'amount'

蝴蝶刀刀 2022-01-18 15:39:14
我无法从视图访问类中的deposit()方法。Account给我错误:deposit() missing 1 required positional argument: 'amount' 我正在调用该方法:Account.deposit(amount)意见:    def home(request):        return render(request, 'automatedbankteller/home.html')    def about(request):        return render(request, 'automatedbankteller/about.html')    @login_required    def transactions(request):        context = {            'transactions': Transaction.objects.filter(sender=request.user)        }        return render(request, 'automatedbankteller/transactions.html', context)    @login_required    def my_accounts(request):        context = {            'accounts': Account.objects.filter(account_owner=request.user)        }        return render(request, 'automatedbankteller/my_accounts.html', context)    @login_required    def deposit(request):        if request.method == 'POST':            form = UserDepositForm(request.POST)            if form.is_valid():                amount = request.POST['amount']                print(amount)                Account.deposit(amount)                #form.save()                messages.success(request, f'The amount has been deposited into your account!')                return redirect('ABT-my_accounts')        else:            form = UserDepositForm(instance=request.user)        return render(request, 'automatedbankteller/deposit.html', {'form': form})楷模:    class Account(models.Model):       ACCOUNT_TYPES = (        ('SA', 'Savings'),        ('CA', 'Checking'),    )        accountID = models.IntegerField()        account_amount = models.DecimalField(max_digits=20, decimal_places=2)        account_type = models.CharField(max_length=2, choices=ACCOUNT_TYPES)        account_owner = models.ForeignKey(User, on_delete=models.CASCADE)    def __str__(self):        return str(self.accountID)    def get_balance(self):        return self.account_amount    def deposit(self, amount):        self.account_amount = self.account_amount + amount        return
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

Account.deposit(amount) 这里 Account 是 class 。您需要在此类的实例上调用 deposit 方法,例如。


account = Account.objects.get(id=1)

account.deposit(amount)


查看完整回答
反对 回复 2022-01-18
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您deposit()需要两个参数 - 类实例和数量。所以需要先创建Account实例,然后使用方法。此外,由于您没有返回更新的金额,您可以save()在方法本身内部调用方法。


class Account(models.Model):

   ...

def deposit(self, amount):

    self.account_amount = self.account_amount + amount

    self.save()

    return


您需要先调用deposit实例。


# views.py

@login_required

    def deposit(request):

    if request.method == 'POST':

        form = UserDepositForm(request.POST)

        if form.is_valid():

            amount = request.POST['amount']

            print(amount)

            account = form.save(commit=False)  #no commit in DB

            account.deposit(amount)  # use class instance


            messages.success(request, f'The amount has been deposited into your account!')

            return redirect('ABT-my_accounts')

    else:

        form = UserDepositForm(instance=request.user)


    return render(request, 'automatedbankteller/deposit.html', {'form': form})

您也可以从该deposit方法返回更新后的金额,但您需要save()自己调用。


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 302 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信