Почему мой код выбрасывает объект '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)