2017-08-04 81 views
0

我有一個情況我想基於這樣在傳遞的過濾器來修改資源的查詢集信息查詢集。修改TastyPie資源與過濾器

我想這是因爲某些過濾器需要昂貴的操作被添加到查詢集,並且我只想在用戶請求過濾器時執行它們。

該文檔(HERE)顯示如何使用get_object_list(可訪問請求)修改查詢集。

我想要做的事,如:

類MyResource(ModelResource):

def get_object_list(self, request): 
    current_qs = super(MyResource, self).get_object_list(request) 
    current_filters = SOMEHOW_GET_FILTERS(request) 

    if 'name' in current_filters: 
     current_qs = current_qs.annotate(best_friend=RawSQL("COMPLICATED SQL QUERY")) 

    return current_qs 

有什麼想法?如果我可以在不中斷請求/響應循環的其餘部分的情況下從get_object_list執行build_filters,那可能會解決我的問題。任何方向表示讚賞。

回答

0

希望有人會有更好的答案,但: 我檢查了request對象,並發現它有一個請求['GET']字段存儲queryDict

所以,如果你打電話localhost:8000/api/dosomething?first_name=stevie&last_name=wonder

然後request['GET'].keys()將返回['first_name,' 'last_name']

對於我而言,這已經足夠了。您可能想將其傳遞給self.build_filters,但我不需要。