2014-12-06 21 views
3

我想使用@list_route裝飾器在我的ModelViewSet中創建一個自定義視圖,該裝飾器需要一些參數。我似乎無法找到一個這樣的例子。如何在ModelViewSet中使用自定義視圖的參數

我想我會喜歡我的功能看起來像:

@list_route() 
def my_list(self, request, arg1, arg2, arg3): 
    models = Model.objects.all().filter("""do some filtering with my args""") 
    serializer = ModelSerializer(models, many=True, context={'request': request}) 
    return Response(serializer.data) 

同樣,我不知道究竟在何處或如何我應該通過這些論點,或者如果我想要做的是,即使正確,但這似乎是一個非常普遍的用法。

回答

7

這聽起來像你正在尋找使用查詢參數來過濾你的查詢集。 Django REST Framework爲篩選查詢集through the filtering backends提供了很多幫助。

filtering through the query parameters有一個特定的部分,聽起來像你正在使用的。它採用request.query_params,這是Django的REST框架增加了一個自定義的方法,收集所有被傳遞的查詢參數。

如果你正在尋找的URL過濾(/api/users/search/:search例如),那麼你就需要修改爲您的查詢集生成的url,以提供這些額外的參數。 Django REST Framework不提供使用Router類來完成此操作的簡單方法,但您可以通過manually registering the urls with Django執行此操作。

+0

謝謝。這是我正在尋找的。我不知道查詢參數是什麼,所以我不知道我在問什麼,或者在尋找什麼。這很好,而且爲了我的需要,我甚至不需要在我的ModelViewSet中編寫一個方法,只需重寫get_queryset即可。 – grez 2014-12-09 05:59:56

相關問題