2016-09-21 31 views
0

我需要創建一個連接到多個其他的API,以應用濾鏡Tastypie - 調用其他resoueres的調度手動

我所做的就是呼籲主要API的調度方法,調度方法的API(稱爲虛擬) 。我改變了請求QUERY_STRING爲每個被被稱爲

class DummyResource(MultipartResource, ModelResource): 
    class Meta: 
     queryset = Dummy.objects.all() 
     resource_name = 'dummy' 
     allowed_methods = ['get'] 

    def dispatch(self, request_type, request, **kwargs): 
#Call the 1st API 
     request.META['QUERY_STRING']='years_experience__in=2&production_2015__gt=105000' 
     obj=APIONEResource() 
     print 'Result'+str(obj.dispatch(request_type, request, **kwargs)) 

#Call the 2nd API  
     request.META['QUERY_STRING']='LOS__contains={2}&annual_production__in=4' 
     obj=APITWOResource() 
     print 'Result'+str(obj.dispatch(request_type, request, **kwargs)) 

    return super(DummyResource, self).dispatch(request_type, request, **kwargs) 

現在,當我打電話一號API一切工作正常,我也得到了正確的過濾結果的API。但是當我調用第二個API時,它會返回沒有任何過濾器的所有結果。我可以確認QUERY_STRING是否正確更改,並且無法理解爲什麼這不起作用。我嘗試了調用順序,結果是,第一次調用任何API時,應用了過濾器,但第二次不適用。

任何想法?

回答

0

好的想通了我做錯了什麼。我正在爲所有分派方法重複使用相同的請求對象。這意味着查詢過濾器沒有改變。

def dispatch(self, request_type, request, **kwargs): 
     import copy 
     request2=copy.copy(request) 

#Call the 1st API 
     request.META['QUERY_STRING']='years_experience__in=2&production_2015__gt=105000' 
     obj=APIONEResource() 
     print 'Result'+str(obj.dispatch(request_type, request, **kwargs)) 

#Call the 2nd API  
     request2.META['QUERY_STRING']='LOS__contains={2}&annual_production__in=4' 
     obj=APITWOResource() 
     print 'Result'+str(obj.dispatch(request_type, request2, **kwargs))