0

フィールドの必須属性のオンとオフを切り替えたいフォームがあります。フォームのCharFieldの必須属性を正常に使用できますが、ページの更新時またはフォームをPOSTしたときのみです。GETコールバックを実行しようとすると、「時々」フィールドのオンとオフを切り替える必要がありますが、「必須」のhtmlクラスは更新されません。

更新されないhtmlで、「必須」クラスを示しています。これはDjangoによって自動生成されます:

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

簡略化された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"),)

私の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");
             });
    });
  });

では、どうすればhtmlにクラス名を更新させることができますか?

4

1 に答える 1

0

問題はブラウザとサーバーの間のどこかにあるのではないかと思います。ページをPOSTまたは明示的にリロードすると、ブラウザはサーバーからページ全体をロードし、そのキャッシュを無視します。ただし、通常のGETリクエストを実行すると、ブラウザに最後にキャッシュされたバージョンのページが表示される場合があります。

解決策は、この特定のビューへのHTTP応答に次のヘッダーを追加することです。

Cache-Control: no-cache

これを実行する1つの方法は、次のようなデコレータでビューを装飾することです。http: //djangosnippets.org/snippets/275/

于 2012-04-12T18:33:23.250 に答える