得到的类实例我有这个简单的函数从数据库retrive数据:更快的方式从阿贾克斯
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_object
is 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()
上使用其他条件吗?为什么不应该是ajax?
谢谢