得到的類實例我有這個簡單的函數從數據庫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?
謝謝