【发布时间】:2018-01-10 23:47:30
【问题描述】:
我有这个简单的函数来从数据库中检索数据:
function find_object() {
$.ajax({type: 'POST',
url: '/find-object/',
data: {
position: position,
},
success: function (result_list) {
if (result_list.result === 'OK') {
console.log(result_list.data.myobject)
} else {
console.log('not found')
};
}
});
};
这里是view:
def find_object(request):
if request.is_ajax():
position = request.POST.get('position', None);
try:
my_object=My_Class.objects.get(coordinate=position)
except:
return JsonResponse({'result': 'None'})
my_other_object=My_Other_Class.objects.filter(my_ForeignKey_field=my_object)
if my_related_object:
my_field=my_other_object.my_field
#do things
return JsonResponse({'result': 'OK', 'data': { 'myobject': my_object }})
它给出错误是因为my_objectis not JSON serializable,但它不是查询集,因为它来自.get(),所以我不能像这样序列化:
my_object_json=serializers.serialize('json', my_object)
在第一个请求中,我使用了.get(),因为它比.filter() 快(当异常罕见时,它们确实如此)。对于每个position,只有一个my_object 或(很少)没有。在第二个请求中,我使用了.filter(),因为异常并不罕见。
所以问题:
1) 使用.filter() 而不是.get() 然后像上面那样序列化my_object 更快还是有其他方法?也许没有 JsonResponse?我需要包含所有字段的对象
2) my_other_object 是一个类的实例,其中my_object 是 ForeignKey。我想要的是?如果my_object 存在,我想看看是否存在对应的my_other_object 并找到他的一个字段的值。对于每个 my_object,只有一个 my_other_object 或没有。我的解决方案有效,但也许有更快的方法。
另外:我应该在if request.is_ajax() 上使用else 条件吗?为什么不应该是ajax?
谢谢
【问题讨论】:
标签: json ajax serialization django-queryset jsonresponse