我有一个用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 dictionnary中的信息。我如何得到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>
解决这些值不再有问题!解决!
答案 0 :(得分:2)
您需要使用json
module来序列化结果,而不是使用字典的str
转换。
return HttpResponse(json.dumps(result), mimetype="application/json")
更好的是,使用JSONResponse()
object或Django serializer为您创建JSON结果;第一个是完全替换编码为JSON的HttpResponse
对象,并确保使用正确的mimetype。
答案 1 :(得分:0)
首先在服务器端创建一个JSON(例如使用json
模块):
import json
json = json.dumps(queryset)
然后使用parseJSON()
(或现代浏览器的JSON.parse
)在JavaScript中解析检索到的JSON:
var json = $.parseJSON(jsonVar);
console.log(json.releveMois);
答案 2 :(得分:0)
解决这个问题的更好方法......
问题是:在values
中选择queryset
的几列时,会混淆输出。解决方案是使用only
代替(在过滤器之前)。
lawsToValidate=forms.ModelChoiceField(queryset=LawsIdsModel.objects.only("releveAnnee", "releveMois", "noOrdre").filter(validated=0), widget=forms.Select(attrs={'onchange': 'javascript: lawToValidateDisplay(this.value);'}))