2017-07-12 18 views
0

おはよう!
django rest detail_routeテスト

class PostView(viewsets.ModelViewSet): 
    queryset = Post.objects.all() 
    serializer_class = PostSerializer 

    @detail_route(methods=['POST']) 
    def like(self, request, pk=None): 
     post = self.get_object() 
     post.like(request.user) 
     return Response({'result': 'success'}) 

ので、like機能のURLが

のような/ API /ポスト/ {ID} /である私は、このようなdjango.test.TestCaseでそれをテストしてみてください:

私はこのようなdetail_routeとの見解を持っています

post = Post.objects.first() 
url = reverse('api:post-detail', args=[post.id]) 
url = urljoin(url, 'like') 
response = self.client.post(url, content_type='application/json', follow=True) 

私は、コード300リダイレクトを得るためfollow=Trueを使用する必要がありますが、私はPOSTを必要とするとき、私は、要求をGET返すリダイレクト。 私はAPIClientAPIRequestFactoryを試してみましたが、同じエラーが出ましたかmyapp.models.DoesNotExist
タンクが注目に値する!

答えて

0

あなたが300を得るという事実は、あなたが何か間違っているという印であるべきです。

メインURLを逆順にして手動で詳細ルートの延長に参加するのではなく、必要な完全なURLに直接戻す必要があります。 the docs for detail_routeが表示されているので、そのデコレータは<model>-<detail-method>という名前のルートを提供します。 So:

url = reverse('api:post-like', args=[post.id]) 
response = self.client.post(url, content_type='application/json') 
+0

ありがとうございます!私は注意を払わずにドキュメントを読んだと思う。 –

関連する問題