2015-08-14 119 views
1

假设我有模型ABC和标签具有多对多的关系,如何通过ajax将django模型queryset发送给模板?

options = Abc.objects.all() 
    tagsset = [] 
    for entry in options: 
     tags_arr = entry.tags_set.all() 
    if tags_arr: 
     tagsset.append(tags_arr) 



    data = {} 

如何格式化我的查询集数据这两个选项和tagsset?

回答

0

你可以把它们放在一本字典,将它们转换成JSON,并将其返回JSON_OBJECT

data = {} 
data['options'] = options 
data['tagsset'] = tagsset 

json_object = json.dumps(data) 

return HttpResponse(json_object) 

这上面的代码将JSON对象发送给调用AJAX方法

0

答案很简单:

data = {} 
data['options'] = options 
data['tagset'] = tagset 
# NOTE: since you skip empty tag sets, 
#  len(tagset) <= len(options) 
# so if you are going to match tagsets with options in the 
# browser, they may not match length-wise 

虽然问题只问格式化返回参数,但这个答案显示了一种不同的方式来做山姆e(对于需要打包和发送更多数据的情况,IMO更好。这种方法还将相关数据保存在一起,即将选项和相关标签绑定在一起。

# payload is the data to be sent to the browser 
payload = [] 
# get all options and associated tags 
# this will be a list of tuples, where each tuple will be 
# option, list[tags] 
for option in Abc.objects.all(): 
    payload.append((
     option, # the option 
     list(option.tags_set.all()), # list of linked tags 
    )) 
# return this payload to browser 
return HttpResponse(
     # good practice to name your data parameters 
     json.dumps({ 'data': payload, }), 
     # always set content type -> good practice! 
     content_type='application/json' 
    ) 


# in the browser template, you can do something such as: 
{% for option, tags in data %} 
    {{ option.something }} 
    {% for tag in tags %} 
     {{ tag.something }} 
    {% endfor %} 
{% endfor %}