我正在使用python django开发我的一个网站,我在我的一个页面中使用angularjs,我已经给了用户搜索选项(特定请求)。这是我的模特......
class Request(models.Model):
description = models.TextField(blank=True,null=True)
category = models.ForeignKey(Category)
sub_category = models.ForeignKey(SubCategory)
在我的观点中,我将通过以下代码返回:
def some(code, x):
exec code
return x
def search_request(request):
page = request.GET.get('page')
term = request.GET.get('term')
i = 0
terms = "x = Request.objects.filter("
for t in term.split(" "):
i=i+1
if(len(term.split(" "))>i):
terms = terms +"Q(name__icontains='"+t+"')|"
else:
terms = terms +"Q(name__icontains='"+t+"'))"
junk = compile(terms,'<string>', 'exec')
spit = Request.objects.filter(name__icontains=term)
requests = some(junk,spit)
output = HttpResponse()
output['values']=[{'requests':r,'category':r.category,'subcategory':r.sub_category} for r in requests]
return JSONResponse(output['values'])
当我使用AngularJS返回时,在我的HTML代码中:
$scope.search = function(){
$scope.results = $http.get("{% url 'search-requests-show' %}?term="+$scope.term).then(
function(result){
return result.data;
}
);
}
HTML输出的结果与{[{results}]}:
相同"[{'category': <Category: The New Category>, 'requests': <Request: Need a Table>, 'subcategory': <SubCategory: Testsdfsdfsad>}]"
问题是我无法使用results.category进行访问,因为输出是“string”,因此ng-repeat =“result in results”将结果显示为
[ { ' c a .....
我可能在做错事。如果有人有任何建议,请回答。
答案 0 :(得分:1)
JSONResponse
可能正在使用标准的python json编码器,它并不真正为你编码对象,而是输出它的字符串表示(repr
),因此<Category: The New Category>
输出。
您可能需要使用一些外部序列化程序类来处理django对象,例如:
如果没有,那么你应该将对象规范化为视图内的简单python类型(dict,list,string ..,json模块没有编码问题的那种)。所以改为:
'category':r.category
你可以这样做:
'category': {'name': r.category.name}
另外作为旁注:使用exec
超级糟糕的主意。不要在生产中使用它!
答案 1 :(得分:0)
你应该为Angular返回json字符串:
import json
def resource_view(request):
# something to do here
return HttpResponse(json.dumps(your_dictionary))
为了更好的使用,我建议djangorestframework。
关闭主题:
$http.get("{% url 'search-requests-show' %}?term="+$scope.term);
你可以传递'param'对象:
$http.get("{% url 'search-requests-show' %}", {param : {term:$scope.term}});