2012-04-12 4 views
0

Ich habe ein Formular, für das ich das erforderliche Attribut eines Feldes ein- und ausschalten möchte. Ich kann die required attribute of the Form's CharField erfolgreich aber nur auf einer Seitenaktualisierung verwenden oder wenn ich das Formular POST. Wenn ich versuche, einen GET-Callback durchzuführen, muss das Feld 'manchmal' ein- und ausgeschaltet werden, aber die HTML-Klasse 'erforderlich' wird nicht aktualisiert.Django "erforderlich" -Attribut/Klasse nicht auffrischend

Der HTML-Code, der nicht aktualisiert wird, zeigt die Klasse "required" an. Dies wird automatisch generiert von Django:

<dt class="required"> 
    <label for="sometimes">Username</label> 
</dt> 

Simplified views.py:

form_validate(httpreq): 
    form = SetupForm() 
    if httpreq.GET.has_key('req'): 
    # In this case, it is not the initial call 
    if httpreq.GET['req'] == 'true': 
     print 'required is True' 
     form.fields['sometimes'].required = True 
    else: 
     print 'required is False' 
     form.fields['sometimes'].required = True 
    else: 
    # Here, required = True/False behaves as expected 
    # When the field is required, it has the class="required" 
    form.fields['sometimes'].required = True 
    # For forms.fields['sometimes'].required = False, 
    # class="required" is absent in the html 


class SetupForm(forms.Form): 
    sometimes = forms.CharField(widget=forms.TextInput(attrs={'id':'sometimes','size':FIELD_LENGTHS['shorttext'],}), label=ugettext_lazy("Username"),) 

Meine jQuery:

$(document).ready(function(){ 
    $('#tog').click(function(){ 
     var params = {} 
     if ($("#tog").is(":checked")) { 
      params = {"auth":true}; 
     } else { 
      params = {"auth":false}; 
     } 
     var url = "/url_for_form/?fmt=json"; 
     $.getJSON(url, params, function(jsonrpc, xhrstatus, xhr) { 
       console.log("JSON callback"); 
      }); 
    }); 
    }); 

Also, wie kann ich die html machen den Klassennamen auffrischen?

Antwort

0

Ich vermute, das Problem liegt irgendwo zwischen dem Browser und dem Server. Wenn Sie eine Seite POST oder explizit neu laden, lädt der Browser die vollständige Seite vom Server und ignoriert dabei den Cache. Wenn Sie jedoch eine reguläre GET-Anforderung ausführen, zeigt der Browser möglicherweise die zuletzt zwischengespeicherte Version der Seite an.

Die Lösung ist die folgende Header der HTTP-Antwort auf diese spezielle Ansicht hinzuzufügen:

Cache-Control: no-cache 

Ein Weg, um dies zu realisieren sein könnte Ihrer Ansicht nach mit einem ähnlichen Dekorateur zu verzieren, um diese: http://djangosnippets.org/snippets/275/

Verwandte Themen