2017-01-26 11 views
2

Я не смог показать ошибки проверки django в моей модальной форме загрузки. Мне нужно установить поле client_phone в форме не менее 13 символов, если нет - показать ошибку и выделить поле. Джанго - 1.10, Бутстрап 3Django ModalForm показать ошибку проверки на bootstrap Модальная форма

Вот код:

Модель:

class Order(models.Model): 
    order_date = models.DateTimeField(auto_now_add=True, blank=True) 
    client_phone = models.CharField(max_length=18) 
    client_email = models.EmailField(max_length=50) 

затем ModelForm:

class OfferForm(ModelForm): 
    class Meta: 
     model = Order 
     fields = ['client_phone', 'client_email'] 
     widgets = { 
      'client_phone': TextInput(attrs={'class': 'form-control bfh-phone', 'data-country': 'UA', }), 
     } 
     labels = { 
      'client_phone': _('Контактный номер'), 
     } 

Шаблон с начальной загрузки модальной формы:

<div class="modal fade" id="offerModalForm" tabindex="-1" role="dialog" 
      aria-labelledby="myModalLabel" aria-hidden="true"> 
      <div class="modal-dialog"> 
       <div class="modal-content"> 
        <div class="modal-body"> 
         <form role="form" action="ordercomplete" method="post" enctype="multipart/form-data"> 
          {% csrf_token %} 
          {{ form }} 
          <div class="modal-footer"> 
           <button type="submit" id="offerSubmitBtn" class="btn btn-primary" type="submit"> 
            Оформить заказ 
           </button> 
           <button type="button" class="btn btn-primary" 
             data-dismiss="modal"> 
            Закрыть 
           </button> 
          </div> 

         </form> 
        </div> 
       </div> 
      </div> 
     </div> 

Если я так:

def clean_client_phone(self): 
     phone = self.cleaned_data.get('client_phone') 
     if len(phone) < 13: 
      raise forms.ValidationError(_('Invalid value'), code='invalid') 
     return phone 

Тогда form.isValid() становятся ложными, и ничего не произошло.

Также здесь мое мнение:

def ordercomplete(request): 
    if request.method == 'POST': 
     form = OfferForm(request.POST, request.FILES) 
     if form.is_valid(): 
      order = form.save() 
      date = order.order_date.strftime('%d-%m-%Y %H:%M') 
      phone = form.cleaned_data['client_phone'] 
     return render(request, 'viveska/ordercomplete.html') 
    else: 
     return render(request, 'viveska/ordercomplete.html') 

HTML модальных является частью моей главной странице, где я называю его нажатием кнопки:

<button type="button" class="btn btn-lg make_order_btn" data-toggle="modal" 
          data-target="#offerModalForm">Оформить заказ 
        </button> 

Update 1:

Я редактировал ordercomplete посмотреть так:

, и теперь он показывает мне полевые ошибки, но каждый раз, когда какое-то значение недействительно, он скрывает форму, потому что она модальная. Как я могу сохранить его на экране после отправки с недопустимыми значениями?

+0

является html страницей 'ordercomplete'?Вы никогда не передаете форму в контекст, поэтому я не уверен, как форма даже показывает – Sayse

+0

no, html - это часть моей главной страницы, где я показываю модальную форму: ordercomplete.html только сказал, что заказ завершается хорошо. Я обновил вопрос. –

+1

В основном вы используете {% if form.errors%} // ваша модальная логика загрузки здесь {% endif%} см. Этот вопрос http://stackoverflow.com/questions/22470637/django-show-validationerror-in-template – oat

ответ

0

Наконец-то я прошел проверку модальной формы с помощью JavaScript. Спасибо за ответы.

0

Вы были на 90% от пути туда.

Вид:

form_error = False 
    if form.is_valid(): 
     order = form.save() 
     date = order.order_date.strftime('%d-%m-%Y %H:%M') 
     phone = form.cleaned_data['client_phone'] 
    else: 
     form_error = True 

Шаблон:

{% if form_error %} 
     $(#offerModalForm).modal("show"); 
    {% endif %} 

Это покажет модальную форму пользователю, если произошла ошибка.

Я считаю, что проверка правильности JavaScript, вероятно, по-прежнему остается, так как это не приводит к поведению и дает более отформатированные сообщения. Вышеупомянутое решение будет перезагружать страницу (которую пользователь может видеть наглядно), а затем открыть модальное окно (опять же, пользователь может его увидеть).

Самое большое преимущество, которое я вижу в том, что проверка формы в самих формах заключается в том, что вы можете иметь очень последовательную проверку в любом месте, где используется форма, без изменения или добавления какого-либо дополнительного кода.

+0

Да, основным недостатком этого метода является то, что форма будет перезагружена. Я согласен, что валидация формы действительно классная :) –

 Смежные вопросы

  • Нет связанных вопросов^_^