javascript - 从序列化为 JSON 的 Django 对象中提取值的问题
问题描述
我已经使用序列化了一个 Django 对象
data = serializers.serialize("json", vchemicals)
并将其传递到我的模板中,可以在其中打印为:
[{"model": "vbench.vchemical", "pk": 1, "fields": {"shortname": "NaCl", "longname": "Sodium Chloride", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 2, "fields": {"shortname": "NH4SO4", "longname": "Ammonium Sulphate", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 3, "fields": {"shortname": "Glucose", "longname": "D-Glucose", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 4, "fields": {"shortname": "NaPO4", "longname": "Sodium Phosphate", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 5, "fields": {"shortname": "Glycerol", "longname": "Glycerol", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 6, "fields": {"shortname": "KCl", "longname": "Potassium Chloride", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 7, "fields": {"shortname": null, "longname": "Tryptone", "catno": null, "batchno": 1, "owner": 1}},
{"model": "vbench.vchemical", "pk": 8, "fields": {"shortname": "Test", "longname": "Name that is clearly too long for the table", "catno": null, "batchno": 1, "owner": 1}}]
我将其设置为脚本中的 JS 变量,使用
var chemlist = "{{ data }}";
现在打印为
[{"model": "vbench.vchemical", "pk": 1, "fields": {"shortname": "NaCl", "longname": "Sodium Chloride", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 2, "fields": {"shortname": "NH4SO4", "longname": "Ammonium Sulphate", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 3, "fields": {"shortname": "Glucose", "longname": "D-Glucose", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 4, "fields": {"shortname": "NaPO4", "longname": "Sodium Phosphate", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 5, "fields": {"shortname": "Glycerol", "longname": "Glycerol", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 6, "fields": {"shortname": "KCl", "longname": "Potassium Chloride", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 7, "fields": {"shortname": null, "longname": "Tryptone", "catno": null, "batchno": 1, "owner": 1}}, {"model": "vbench.vchemical", "pk": 8, "fields": {"shortname": "Test", "longname": "Name that is clearly too long for the table", "catno": null, "batchno": 1, "owner": 1}}]
当我尝试使用
chemlist[0]
我明白了
[
而不是我想要的,即:
{"model": "vbench.vchemical", "pk": 1, "fields": {"shortname": "NaCl", "longname": "Sodium Chloride", "catno": null, "batchno": 1, "owner": 1}}
有人可以告诉我我去了哪里吗?我想使用 pk 值作为键来访问字段值(短名称、长名称等)。
编辑:添加了用于解决此问题的 AJAX/jQuery
模板代码:
<script>
var acc = document.getElementsByClassName("chemicalrow");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
var theid = this.id;
var data = {theid};
console.log(data)
$.ajax({
type : 'GET',
url : "{% url 'get_chemical_data' %}",
data : data,
success : function(response){
document.getElementById("snamebox").value=response.chem_info.sname
document.getElementById("lnamebox").value=response.chem_info.lname
document.getElementById("catnobox").value=response.chem_info.catno
document.getElementById("batchnobox").value=response.chem_info.batchno
},
error : function(response){
console.log(response)
}
})
})
}
</script>
视图.py
def getChemicalData(request):
if request.method == "GET" and request.is_ajax():
theid = request.GET.get("theid")
try:
chemical = vChemical.objects.get(id = theid)
except:
return JsonResponse({"success":False}, status=400)
chem_info = {
"sname": chemical.shortname,
"lname": chemical.longname,
"catno": chemical.catno,
"batchno": chemical.batchno,
}
return JsonResponse({"chem_info":chem_info}, status=200)
return JsonResponse({"success":False}, status=400)
解决方案
推荐阅读
- flutter - 由其他小部件约束小部件
- node.js - WebOS:在 LG 电视上读取 U 盘内容的 API
- charts - 在 Power BI 中将自定义成员显示为 Axis-X
- makefile - 链接模式规则内部
- pdf - 在 NativeScript 应用程序中生成和显示 PDF
- elasticsearch - Logstash 使用 http_poll 未在 kibana 仪表板中创建索引模式。错误 -LogStash::ConfigurationError", :message=>" 预期为 # 之一,
- php - 检查坐标是否位于多边形中
- firebase - 即使没有数据更改,Firestore 缓存也无法正常工作
- c++ - 我在 C++ 中编写了一个方法来打印树类的预排序,但它显示分段错误
- ios - 如何使用 docker 构建反应原生 iOS 应用程序?