0

Django で作成した modelChoiceField があります。

lawsToValidate=forms.ModelChoiceField(queryset=LawsIdsModel.objects.filter(validated=0).values("releveAnnee", "releveMois", "noOrdre"), widget=forms.Select(attrs={'onchange': 'javascript: lawToValidateDisplay(this.value);'}))

django コードは、次の html コードを作成します。

<option value="{'releveMois': 1L, 'noOrdre': 2L, 'releveAnnee': 2009L}">{'releveMois': 1L, 'noOrdre': 2L, 'releveAnnee': 2009L}</option>

django コードは、ドロップダウン リストをクリックした直後に jquery 関数を呼び出します。選択した値を JavaScript 関数で表示すると、次のようになります。

{'releveMois': 1L, 'noOrdre': 3L, 'releveAnnee': 2009L}

jquery / javascriptでこのpython辞書から情報を取得するにはどうすればよいですか。releveMois、releveAnnee、noOrdre を取得するにはどうすればよいですか? jQuery.parseJSON を試してみると、うまくいきません。

EDIT: 以下のコメントで、html出力を変更する方が良いことがわかりました。ドロップダウンリストを生成するためのテンプレートコードは次のとおりです。

<div id="lawsToValidateChoice" class="fieldWrapper">
            {{ form.lawsToValidate.errors }}
            <select  onchange="javascript: lawToValidateDisplay(this.value);" name="lawsToValidate" id="id_lawsToValidate">
                <option value="" selected="selected">Select a law to validate</option>
                {% for law in form.lawsToValidate.field.queryset %}
                    <option value="{{ law.releveAnnee }},{{ law.releveMois }},{{ law.noOrdre }}">releveAnnee={{ law.releveAnnee }}, releveMois={{ law.releveMois }}, noOrdre={{ law.noOrdre }}</option>
                {% endfor %}
            </select>
        </div>

値を解析するのにもう問題はありません! 解決しました!

4

3 に答える 3

2

辞書の変換ではなく、jsonモジュールを使用して結果をシリアル化する必要があります。str

return HttpResponse(json.dumps(result), mimetype="application/json")

さらに良いのは、JSONResponse()オブジェクトまたは Django シリアライザーを使用して JSON の結果を作成することです。HttpResponse1 つ目は、 JSON にエンコードするオブジェクトを完全に置き換えるもので、正しい MIME タイプが使用されるようにします。

于 2012-12-05T15:59:18.903 に答える
0

それを解決するためのより良い方法...問題は次のとおりです。でいくつかの列を選択するとvaluesqueryset出力が混乱します。解決策は、only代わりに(フィルターの前に)使用することでした。

lawsToValidate=forms.ModelChoiceField(queryset=LawsIdsModel.objects.only("releveAnnee", "releveMois", "noOrdre").filter(validated=0), widget=forms.Select(attrs={'onchange': 'javascript: lawToValidateDisplay(this.value);'}))
于 2013-09-19T18:12:22.330 に答える
0

最初にサーバー側で JSON を作成します (例json: モジュールを使用):

import json
json = json.dumps(queryset)

次に、取得した JSON を JavaScript で解析しますparseJSON()(またはJSON.parse最新のブラウザーの場合):

var json = $.parseJSON(jsonVar);
console.log(json.releveMois);
于 2012-12-05T16:00:25.180 に答える