从JSON序列化的django对象访问字段值
Access Field Values from JSON serialized django object
我有一个问题,证明比我想象的更难找到答案。我使用AJAX根据来自另一个选择框的响应来更新选择选项。我能够正确检索对象的正确列表,序列化为json,但我不能访问对象的任何字段值。
视图:
def choose_group(request):
team_id = request.POST['team_id']
groups = WorkoutGroup.objects.filter(team_id=team_id)
data = serializers.serialize('json', groups)
return HttpResponse(data, content_type='application/json')
Javascript/jQuery:
$('#team').on('change', function(){
var team_id = $(this).val();
$.ajax({
type: 'POST',
url: '/create_workout/choose_group/',
dataType: 'json',
async: true,
data: { csrfmiddlewaretoken:'{{ csrf_token }}', team_id: team_id },
success: function(data) {
var groups = $('#group');
$(groups).children().not(':first').remove();
if (data.length >= 1){
$.each(data, function(group){
$(groups).append('<option value=' + group['fields']['id'] + '>' + group['fields']['group_name'] + '</option>');
});
}
}
});
})
我尝试访问每个对象的字段(如模型中定义的对象的id和group_name)的所有方式都会出现错误。错误是"无法读取未定义的属性"。
编辑:我也试过创建一个ValueQuerySet并使用simplejson转储它,但我仍然无法访问任何字段,只是"未定义"。此外,如果对每个组发出警报,则只会得到组列表中迭代的索引。
新观点:def choose_group(request):
team_id = request.POST['team_id']
groups = WorkoutGroup.objects.filter(team_id=team_id).values('id','group_name')
#data = serializers.serialize('json', groups)
return HttpResponse(simplejson.dumps(list(groups)), content_type='application/json')
和我的Javascript现在看起来像这样:
$('#team').on('change', function(){
var team_id = $(this).val();
$.ajax({
type: 'POST',
url: '/create_workout/choose_group/',
dataType: 'json',
async: true,
data: { csrfmiddlewaretoken:'{{ csrf_token }}', team_id: team_id },
success: function(groups_list) {
var groups = $('#group');
$(groups).children().not(':first').remove();
if (groups_list.length >= 1){
//json = JSON.parse(data);
$.each(groups_list, function(group){
alert(group)
$(groups).append('<option value=' + group.pk + '>' + group.fields.group_name + '</option>');
});
}
}
});
})
访问序列化的django对象
要访问序列化的django对象,你需要首先解析data变量,像这样:
var obj = JSON.parse(data);
然后你可以像这样单独访问每个对象的字段:
// for the first object
obj[0]['fields']['id'] // or obj[0].fields.id
obj[0]['fields']['group_name'] // or obj[0].fields.group_name
// for the second object
obj[1]['fields']['id'] // or obj[1].fields.id
obj[1]['fields']['group_name'] // or obj[1].fields.group_name
// and so on...
你可以这样做:
$.each(obj, function(index){ // for each object
$(groups).append('<option value=' + obj[index]['fields']['id'] + '>'+ obj[index]['fields']['group_name'] + '</option>');
});
相关文章:
- 如何访问对象内部的“categoryIds”字段/键,该对象包含mongodb's `ObjectId(s)`数
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- MVC+访问控制器中的隐藏字段
- ReactJS表单提交如何访问字段值
- 访问KendoUI中Datasource过滤对象的字段
- 表单级别的Anguarjs指令,访问所有字段并检查验证
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- 在 Java 中访问 JavaScript 对象的字段
- 如何在 for 循环中访问 json 数组字段的名称
- 如何访问ng个重复生成的表上的字段
- 无法访问javascript中二维数组中的第二个字段
- 如何访问嵌套的表单ng包含范围/字段
- 无法访问字段'通过aspx页面上的javascript函数传递来自代码隐藏中函数调用的客户端id的s值(页面加载
- 如何访问Javascript中的Sitecore字段
- 从Kendo中的columns.filterable.cell.template函数访问列字段名
- 访问Object字段的JavaScript函数
- 通过JQuery AJAX调用使用Python CGI FieldStorage访问字段
- 从JSON序列化的django对象访问字段值
- JSON -访问字段名为'*'星号
- ASP.. NET Gridview如何访问字段上的复选框