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,它不起作用!

编辑: 通过下面的评论,我明白最好更改 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 结果;第一个是完全替换HttpResponse编码为 JSON 的对象,并确保使用正确的 mimetype。

于 2012-12-05T15:59:18.903 回答
0

首先在服务器端创建一个 JSON(例如使用json模块):

import json
json = json.dumps(queryset)

parseJSON()然后使用(或JSON.parse用于现代浏览器)在 JavaScript 中解析检索到的 JSON :

var json = $.parseJSON(jsonVar);
console.log(json.releveMois);
于 2012-12-05T16:00:25.180 回答
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 回答