Почему мой код выбрасывает объект 'NoneType' без атрибута 'basic_investment_return'?

Почему эта строка кода

?
withdraw.investment.basic_investment_return -= withdraw.basic_withdraw_amount

выдает эту ошибку

'NoneType' object has no attribute 'basic_investment_return'

Виды




@login_required
def create_withdrawal_view(request):
    if request.method == 'POST':
        basic_withdraw_form = BasicWithdrawalForm(request.POST)
        if basic_withdraw_form.is_valid():
            withdraw = basic_withdraw_form.save()
            withdraw.investment.basic_investment_return -= withdraw.basic_withdraw_amount
            print(withdraw.investment.basic_investment_return)
            withdraw.save()
            messages.success(request, 'your withdrawal of {} is successfull '.format(withdraw.basic_withdraw_amount))
        else:
             messages.success(request, 'your withdrawal of {} is unsuccessfull '.format(withdraw.basic_withdraw_amount))
    else:

        basic_withdraw_form = BasicWithdrawalForm()
    context = {'basic_withdraw_form': basic_withdraw_form}
    return render(request, 'create-basic-withdrawal.html', context)

модели

class Investment(models.Model):
    basic_investment_return = models.IntegerField(default=0, null=True, blank=True)
   

class Withdraw(models.Model):
    investment = models.ForeignKey(Investment, on_delete=models.CASCADE, null=True)
    basic_withdraw_amount = models.IntegerField(default=0, null=True, blank=True)

Формы

class BasicInvestmentForm(forms.ModelForm):
    class Meta:
        model = Investment
        fields = ['basic_deposit_amount']


class BasicWithdrawalForm(forms.ModelForm):
    class Meta:
        model = Withdraw
        fields = ['basic_withdraw_amount']

По моему мнению, у вас может быть выведено или инвестиционное значение, приходящее как одно, попробуйте вывести оба значения на консоль, так как это даст представление о том, какое значение приходит как никакое.

@login_required
def create_withdrawal_view(request):
    if request.method == 'POST':
        basic_withdraw_form = BasicWithdrawalForm(request.POST)
        if basic_withdraw_form.is_valid():
            withdraw = basic_withdraw_form.save()
            if withdraw and investement is not None:
                withdraw.investment.basic_investment_return -= withdraw.basic_withdraw_amount
                print(withdraw.investment.basic_investment_return)
                withdraw.save()
                messages.success(request, 'your withdrawal of {} is successfull '.format(withdraw.basic_withdraw_amount))
            else:
                #Raise certain exception saying basic_investment_return is none
        else:
             messages.success(request, 'your withdrawal of {} is unsuccessfull '.format(withdraw.basic_withdraw_amount))
    else:

        basic_withdraw_form = BasicWithdrawalForm()
    context = {'basic_withdraw_form': basic_withdraw_form}
    return render(request, 'create-basic-withdrawal.html', context)
Вернуться на верх