2017-05-02 7 views
1

ここを見ている:ルータ `detail_route`にルックアップフィールドが必要ですか?

@detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf]) 
def set_password(self, request, pk=None): 

と、次のURLパターンが生成されます。こう述べています:http://www.django-rest-framework.org/api-guide/routers/#extra-link-and-actions例はpk=Noneを持って^users/{pk}/set_password/$

こっち:http://www.django-rest-framework.org/api-guide/routers/#simplerouterまたlookupフィールドは、URLであることを言う:{prefix}/{lookup}/{methodname}/

lookup値をDRFがdetail_routeメソッドに渡しますか?あなたは下にスクロールした場合http://www.django-rest-framework.org/api-guide/routers/#example

:ドキュメントに基づいて、それはこっちそれがないように見えますが、

@detail_route() 
    def group_names(self, request): 
     """ 
     Returns a list of all the group names that the given 
     user belongs to. 
     """ 
     user = self.get_object() 
     groups = user.groups.all() 
     return Response([group.name for group in groups]) 

ルックアップ値はgroup_names関数の引数としてを求めていません。私の質問は:

1)detail_routepk /ルックアップフィールド引数が必要ですか?

2)そうでない場合、self.get_object()はどのようなオブジェクトを取得するのですか?

3)また、そうでない場合は、参照が使用されていないので代わりに@list_routeを使用しないでください。

編集:ここではオーバー:http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routingまたThe @detail_route decorator contains pk in its URL pattern and is intended for methods which require a single instance.

答えて

1

1を言う)PK/detail_routeに必要なルックアップフィールド引数ですか?

はい。見つけていただきありがとうございます。リポジトリ内で修正されており、次に文書が生成される際に更新されます。

2)そうでない場合、self.get_object()はどのオブジェクトを取得するかを知っていますか?

ビューの引数/キーワード引数はview.args及び使用をGET_OBJECT view.kwargsに格納されます。

3)また、そうでない場合は、ルックアップが使用されていないため、代わりに@list_routeを使用しないでください。

これは、関連するユーザーを返すself.get_objectによって使用されているため、detail_routeです。