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

我无法从视图访问类中的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


蝴蝶刀刀
浏览 303回答 2
2回答

幕布斯6054654

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

德玛西亚99

您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()自己调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python