Чистый метод формы Django не вызывает ValidationError, вместо этого заставляет функцию is_valid () возвращать False - PullRequest
0 голосов
/ 20 декабря 2018

Я создал эту форму, где есть два поля, одно поле - сумма, а другое - остаток на счете (кредиты).

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>

Я хочу поднять ошибку, если баланс (кредиты) меньше, чем введенная сумма.Есть ли лучший способ сделать это?Должен ли я пойти по-другому?

1 Ответ

0 голосов
/ 20 декабря 2018

Так и должно быть.Не было бы смысла показывать исключение.

Это сообщение показывает, что non_field_errors - это метод, поэтому вам нужно вызвать его.В шаблоне это происходит автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...