Я создал эту форму, где есть два поля, одно поле - сумма, а другое - остаток на счете (кредиты).
forms.py
class SendCredits(forms.Form):
credits = forms.IntegerField(required=False, widget=forms.HiddenInput())
amount = forms.IntegerField(max_value=1000)
def clean_amount(self):
cleaned_data = super(SendCredits, self).clean()
if cleaned_data['amount'] > cleaned_data['credits']:
raise forms.ValidationError("Not enough credits")
return cleaned_data
views.py
if request.method == "POST":
acceptor_points = all_users.filter(email=request.POST.get('towards', False))[0].credit_points
giver_points = all_users.filter(email=request.GET['email'])[0].credit_points
amt = int(request.POST['amount'])
form = SendCredits({'amount': request.POST.get('amount', 0), 'credits': giver_points})
if form.is_valid():
print("Foo!")
else:
print(form.non_field_errors)
Когда я проверяю консоль, она всегда выводит другое: часть условия is_valid ().Что:
<bound method BaseForm.non_field_errors of <SendCredits bound=True, valid=False, fields=(credits;amount)>>
sendto.html
<form class="form-group" method="POST">
<h2>
Please select user to transfer funds to:
</h2>
{%csrf_token%}
<table class="table table-dark">
<thead >
<th scope="col">
Select
</th>
<th scope="col">
Name
</th>
<th scope="col">
E-mail
</th>
<th scope="col">
Credit Points
</th>
</thead>
<tbody>
{%for ex in others%}
<tr>
<td>
<label for="towards">
<input type="radio" name="towards" value="{{ex.email}}"></label>
</td>
<td>
{{ex.user_name}}
</td>
<td>
{{ex.email}}
</td>
<td>
{{ex.credit_points}}
</td>
</label>
</tr>
{%endfor%}
</tbody>
</table>
{%for field in form%}
<p>
{%if field.is_hidden%}
{%else%}
{{field.non_field_errors}}
{{field.label}} {{field}}
{%endif%}
</p>
{%endfor%}
<input type="submit" value="Send Credits" class="btn btn-lg btn-primary">
</form>
Я хочу поднять ошибку, если баланс (кредиты) меньше, чем введенная сумма.Есть ли лучший способ сделать это?Должен ли я пойти по-другому?