Skip to main content
 首页 » 编程设计

python之django rest detail_route 测试

2024年08月20日34lidabo

美好的一天!
我有一个像这样的 detail_route View :

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/posts/{id}/like

我尝试像这样用 django.test.TestCase 测试它:

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) 

我必须使用 follow=True 因为我得到代码 300 重定向,但是当我需要 POST 时重定向返回我的 GET 请求。 我尝试使用 APIClient 和 APIRequestFactory 并得到相同的错误或 myapp.models.DoesNotExist
坦克引起你的注意!

请您参考如下方法:

你得到 300 分的事实应该表明你做错了什么。

与其反转主 URL,然后手动加入详细路由扩展,不如直接反转到您想要的完整 URL。作为the docs for detail_route 显示,该装饰器以 <model>-<detail-method> 的形式为您提供命名路由.所以:

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