2017-07-12 4 views
0

Guten tag!
Ich habe eine Ansicht mit detail_route wie folgt aus:
django rest detail_route testen

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'}) 

So, URL für like Funktion ist/api/posts/{id}/wie

Ich versuche zu testen es mit django.test.TestCase wie folgt aus:

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) 

ich habe follow=True zu verwenden, weil ich Code 300 Umleitung, aber umleiten Rückkehr mir Anfrage, wenn ich POST benötigen. Ich habe versucht, verwenden APIClient und APIRequestFactory und bekam den gleichen Fehler oder myapp.models.DoesNotExist
Tanks für Ihre Aufmerksamkeit!

Antwort

0

Die Tatsache, dass Sie eine 300 überhaupt erhalten, sollte ein Zeichen dafür sein, dass Sie etwas falsch machen.

Anstatt die Haupt-URL umzukehren und dann manuell an der Detailroutextension teilzunehmen, sollten Sie direkt zur gewünschten vollständigen URL zurückkehren. Wie the docs for detail_route zeigen, gibt dieser Decorator Ihnen eine benannte Route in der Form <model>-<detail-method>. Also:

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

Vielen Dank! Ich denke, ich habe die Dokumente ohne Aufmerksamkeit gelesen. –

Verwandte Themen