2

forms.pyсравнить даты и проверить] в Джанго

class SearchFilterForm(Form): 
    fromdate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'})) 
    todate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'})) 

JavaScript:

function comparedate(){ 
     var fromdate = document.getElementById("id_fromdate").value; 
     var todate = document.getElementById("id_todate").value; 
     if(fromdate<todate){ 
     { 
     $("#error-warning").show(); 
     $("#error-warning").text("Please correct the To date");   
     return false;   
    } 

} 

template.html

<button type="submit" name="filter" onclick="comparedate()">Go <img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div> 

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

Может ли одно сказать мне, что будет проблема

+1

если вы положили OnClick на представляет в подчинение может произойти до или после проверки (также зависит, перемещается ли страница или нет) попробуйте использовать http://api.jquery.com/change/ в поле даты и сравнить даты, используя http://stackoverflow.com/questions/5000693/comparing -dates-in-jquery таким образом вы можете сравнить даты, как только значение изменится и не дождаться, когда пользователь нажмет кнопку – boltsfrombluesky

ответ

2

мы имеем другое решение этой проблемы, вы можете попробовать это

<button type="submit" name="filter" onclick="javascript:return comparedate();"> Go<img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div> 
+0

UFM, ваш ответ точно сработал для меня.Спасибо –

0
document.getElementById("button_id").disabled = true 

$("id_todate").change(function(){ 
    var fromdate = document.getElementById("id_fromdate").value; 
    var todate = document.getElementById("id_todate").value; 

    if (Date.parse(fromdate) > Date.parse(todate)) { 
     $("#error-warning").hide(); 
     document.getElementById("button_id").disabled=false; 
    }else{ 
     $("#error-warning").show(); 
     $("#error-warning").text("Please correct the To date"); 
    } 
} 

<button type="submit" name="filter" id="button_id" disabled>Go <img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button> 
<div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div> 

Modified:

<html> 
    <script type="text/javascript" src="jquery-1.10.1.min.js" ></script> 
    <input type="date" id="id_fromdate" /> 
    <input type="date" id="id_todate" /> 
    <input type="submit" name="filter" id="button_id" disabled /> 
    <div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div> 
    <script type="text/javascript"> 
     $("input[type='date']").change(function(){ 
      var fromdate = document.getElementById("id_fromdate").value; 
      var todate = document.getElementById("id_todate").value; 

      if (Date.parse(fromdate) > Date.parse(todate)) { 
       //console.log(fromdate) 
       //console.log(todate) 
        $("#error-warning").hide(); 
        document.getElementById("button_id").disabled=false; 
      }else{ 
       //console.log(fromdate) 
       //console.log(todate) 
      document.getElementById("button_id").disabled=true; 
        $("#error-warning").show(); 
        $("#error-warning").text("Please correct the To date"); 
      } 
     }) 
    </script> 

+0

. Я проверил ваш ответ, подтверждение i s не работает, нажатия кнопки не происходит, в консоли я получил эту ошибку «Uncaught TypeError: не могу установить свойство« отключено »от нуля» –

+0

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

+0

Я уже использую datepicker с полем даты, в html вы снова инициализировали поле для поля даты, и я пробовал ваш код как тот же, кнопка отправки onclick не происходит. Никаких ошибок в консоли я не знаю, работает ли он в html-файле или нет, потому что я напрямую применил ответ в своем приложении, используя django framework. Проверьте другую страницу html, верните назад. –

0

Вы пробовали это? https://docs.djangoproject.com/en/dev/ref/validators/

В случае, если вы хотите сделать проверку на нескольких полей, которые вы можете сделать это в чистом методе формы, так что в вашем форме поиска вы должны:

class SearchFilterForm(Form): 

    def clean(self): 
     if self.fromdate < self.todate: 
      raise ValidationError('Please correct the To date') 
     return self.cleaned_data 

то в вашей точки зрения вы будете есть:

if form.is_valid(): 
    ... 

и в шаблоне вы можете использовать:

{{ form.non_field_errors }} 

Или вместо того, чтобы поднимать ValidationError вы можете вручную установить ошибки поля следующим образом:

self._errors['todate'] = 'Please correct this' 

и в шаблоне вы можете использовать:

{{form.todate.errors}} 
+0

следовали той же процедуре получения ошибки «Объект SearchFilterForm» не имеет атрибута «fromdate» « –

+0

ah извините, это должно быть self.cleaned_data ['fromdate'] Я считаю, –

+0

посмотреть, что я пробовал def clean (self): fromdate = self.cleaned_data [ 'FromDate'] ФОРУМ = self.cleaned_data [ 'ФОРУМЕ'] если FromDate <ФОРУМ: поднять ValidationError ('исправьте На сегодняшний день') возврата self.cleaned_data, никакой проверки не происходит –