2015-10-29 5 views
6

Ich benutze jQuery Monatsauswahl (ohne Datum) mit Format wie: 201110.jquery Monatsauswahl: Einstellung eines anfänglichen Min/Max-Bereichs Konflikte mit "von" <"bis" Funktion

Ich möchte ein Mindest-Datum (siehe in Code), also definieren Sie es zuerst in django forms.py das Datum-min, dann analysieren dieses Datum zu html. Es gibt zuerst einen Min/Max-Bereich. (Obwohl das jetzt nicht funktioniert).

Dann um das "bis" Datum ist immer später als "von" Datum zu realisieren, muss ich auch min/max Funktion verwenden, dann überschreibt es die vorherigen Monatsbereiche, die ich aus SQL gesetzt habe.

Die aktuelle Situation ist, ich könnte realisieren "bis" Datum> "von" Datum. Aber das Mindestdatum (von MYSQL kommend) funktioniert jetzt nicht.

Wie könnte ich diesen Konflikt lösen, bitte sagen Sie mir. Vielen Dank im Voraus

Vielen Dank für Ihre Antwort im Voraus.

<script type="text/javascript"> 
    $(function() { 
$("#from, #to").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     showButtonPanel: true, 
     dateFormat: 'yy MM', 
     minDate: $(this).date-min, ///it is here doesn't work, the minDate is coming from Django 

     onClose: function(dateText, inst) { 
      var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
      var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();    
      $(this).datepicker('setDate', new Date(year, month, 1)); 
     }, 
     beforeShow : function(input, inst) { 
      if ((datestr = $(this).val()).length > 0) { 
       year = datestr.substring(datestr.length-4, datestr.length); 
       month = jQuery.inArray(datestr.substring(0, datestr.length-5), $(this).datepicker('option', 'monthNames')); 
       $(this).datepicker('option', 'defaultDate', new Date(year, month, 1)); 
       $(this).datepicker('setDate', new Date(year, month, 1));  
      } 
      var other = this.id == "from" ? "#to" : "#from"; 
      var option = this.id == "from" ? "maxDate" : "minDate";   
      if ((selectedDate = $(other).val()).length > 0) { 
       year = selectedDate.substring(selectedDate.length-4, selectedDate.length); 
       month = jQuery.inArray(selectedDate.substring(0, selectedDate.length-5), $(this).datepicker('option', 'monthNames')); 
       $(this).datepicker("option", option, new Date(year, month, 1)); 
      } 
     } 
    }); 
    $("#btnShow").click(function(){ 
    if ($("#from").val().length == 0 || $("#to").val().length == 0){ 
     alert('All fields are required'); 
    } 
    else{ 
     alert('Selected Month Range :'+ $("#from").val() + ' to ' + $("#to").val()); 
     } 
    }) 
    }); 


    </script> 

Wie ich meine min-date in django definieren:

In models.py

class XXX(models.Model): 
    start_date=models.DateField(auto_now_add=True) 
    end_date=models.DateField(auto_now_add=True) 

In forms.py

class Meta: 
     model = XXX 
     fields = ('start_date','end_date') 
     date_min=XXX.objects.all().aggregate(Min('date')) <this field is NOT defined in models.py, is that OK?; and format is like 2011-11-01 --> 

     widgets = { 
       'start_date': forms.DateInput(attrs={'class':'datepicker', 
                'date-min':date_min,             
                }),       
      } 
+0

Sie können nicht Aggregat auf einem undefinierten Feld. Wie möchten Sie "date_min" definieren? – Uri

Antwort

2

Zunächst einmal sollten Sie tun

$(this).attr('date-min') 

statt

$(this).date-min 

date-min Attribut zu erhalten.

Ihr nächstes Problem ist, dass Sie $(this) im dom-ready Callback aufrufen, wobei sich dies auf das Dokumentobjekt bezieht, nicht auf das #from oder #to Element.

Die Lösung, die Sie suchen, ist

$(function() { 
    $("#from, #to").each(function() { 
     $(this).datepicker({ 
      .... 
      minDate: $(this).attr('date-min'), 
      .... 
     }) 
    }) 
) 

Und ich bin über diese Linie nicht sicher:

date_min=XXX.objects.all().aggregate(Min('date')) <this field is NOT defined in models.py, is that OK?; and format is like 2011-11-01 --> 

Es ist in Ordnung, dass Sie ein Feld in Form aufweisen, die in verwandten beschrieben ist nicht Modell, aber nicht Zauberstab, um etwas wie Min('start-date') oder Min('end-date') hier zu bekommen? Und hat Ihre Form wie

als etwas definiert
class XXXForm(forms.ModelForm): 
    class Meta: 
     .... 

nicht nur

class Meta: 
    .... 
Verwandte Themen