как перенаправить ошибку формы на страницу формы с ошибками проверки - PullRequest
0 голосов
/ 07 октября 2018

Я создал форму с данными пользователя и написал представление класса для обновления сведений о пользователе в моем приложении django, все работает, но вместо виджетов формы я вручную закодировал форму на странице через эту форму, я обновляю детали.Я не понял, как перенаправить ошибку формы из представления класса на страницу формы с ошибкой, в ошибках django это показывает, что не содержит шаблон aapp / user_form.html .

Htmlкод на странице "profile.html", который содержит форму

<div class="row">
        <div class="col-md-12">
            <form action="{% url 'updatedprofile' user.id %}" method="post">
                {% csrf_token %}
          <div class="modalBox">
          <div class="row">
            <div class="col-md-11">
              <h4>Update Profile</h4>
            </div>
            <div class="col-md-1 icon">
              <p><a href="{% url 'mprofile' %}"><i class="fas fa-times"></i></a></p>
            </div>
          </div>
          <div class="row">
            <div class="col-md-12">
              <table class="table table-striped">
                <thead>
                  <tr>
                    <td>First Name:</td>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>
                        <input type="text" name="first_name" value="{{user.first_name}}" class="form-control no-border simplebox" placeholder="Enter Your First Name Here...">
                    </td>
                  </tr>
                </tbody>
                <thead>
                  <tr>
                    <td>Last Name:</td>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>
                      <input type="text" name="last_name" value="{{user.last_name}}" class="form-control no-border simplebox" placeholder="Enter Your Last Name Here...">
                    </td>
                  </tr>
                </tbody>
              </table>
              <table class="table table-striped">
                <thead>
                  <tr>
                    <td>Mobile: </td>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td><input type="number" name="mobile" value="{{user.mobile}}" class="form-control no-border simplebox" placeholder="Enter Mobile Number Here..."></td>
                  </tr>
                </tbody>
              </table>
              <table class="table table-striped">
                <thead>
                  <tr>
                    <td>Profile Pic: </td>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td><input type="file" name="avatar" value="{{user.avatar}}" class="form-control no-border simplebox"></td>
                  </tr>
                </tbody>
              </table>
            </div>
          </div>
          </div>
            <center><button type="submit" class="btn btn-success">Add Services</button></center>
                </form>
        </div>
      </div>

просмотреть код

class UpdateMprofile(LoginRequiredMixin, LogoutIfNotSuperuserMixin, UpdateView):
    login_url = reverse_lazy('mlogin')
    model = User
    fields = ['first_name', 'last_name', 'mobile', 'avatar']
    success_url = reverse_lazy('mprofile')

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Поскольку вы используете общий вид, вы должны следовать именованию шаблонов Django.В вашем вопросе вы получаете ошибку шаблона, поэтому вы должны добавить шаблон с суффиксом _form, например yourmodelname_form.html.Django автоматически найдет его в папке с вашим шаблоном, См. Официальный документ здесь

Ошибка проверки может отображаться в,

{{form.non_field_errors}}

Примечание: лучше использовать формы.py для редактирования.

0 голосов
/ 07 октября 2018

Как я вижу, вы не определяете template_name в своем представлении, поэтому вы получаете ошибку шаблона.Сначала исправьте это -

class UpdateMprofile(LoginRequiredMixin, LogoutIfNotSuperuserMixin, UpdateView):
    template_name = aapp/profile.html #Template directory should be correct.
    login_url = reverse_lazy('mlogin')
    model = User
    fields = ['first_name', 'last_name', 'mobile', 'avatar']
    success_url = reverse_lazy('mprofile')

Django уже обрабатывает ошибки, но в вашем шаблоне вы не закодировали его, чтобы показать ошибки.

Чтобы показать все ошибки одновременно, вы могли бы -

{% for error in form.non_field_errors %}
    {{error}}
{% endfor %}

или если вы хотите отобразить ошибку с их полем, используйте это -

   {% for error in form.first_name.errors %}
        <span class="help-block text-danger">{{ error }}</span>
    {% endfor %}

Еще одна рекомендация, для использования форм - Widget Tweaks, здесь хорошо учебник .

...