在我看来,我有以下自定义操作:
class OrderAPIViewSet(viewsets.ViewSet):
def create(self, request):
print("Here: working")
@action(detail=True, methods=['post'])
def add(self, request, *arg, **kwargs):
print("HERE in custom action")
order = self.get_object()
print(order)
我的应用urls.py
是:
from rest_framework import routers
from .views import OrderAPIViewSet
router = routers.DefaultRouter()
router.register(r'orders', OrderAPIViewSet, basename='order')
urlpatterns = router.urls
因此,在我的测试中,当我尝试访问orders/post
它时它可以工作,但是当我尝试访问orders/{pk}/add
它时它会失败。我的意思是,反过来本身就失败了:
ORDERS_LIST_URL = reverse('order-list')
ORDERS_ADD_URL = reverse('order-add')
class PublicOrderApiTests(TestCase):
def test_sample_test(self):
data = {}
res = self.client.post(ORDERS_ADD_URL, data, format='json')
正如我之前所说,我有一个单独的测试,我ORDERS_LIST_URL
像这样使用:
res = self.client.post(ORDERS_LIST_URL, data, format='json')
但是在运行测试时出现以下错误:
ImportError:导入测试模块失败:orders.tests Traceback(最近一次调用最后):文件“/usr/local/lib/python3.7/unittest/loader.py”,第 436 行,在 _find_test_path 模块 = self._get_module_from_name(名称)文件“/usr/local/lib/python3.7/unittest/loader.py”,第 377 行,在 _get_module_from_name 导入中(名称)文件“/app/orders/tests.py”,第 22 行,在 ORDERS_ADD_URL = reverse('order-add') 文件“/usr/local/lib/python3.7/site-packages/django/urls/ base.py”,第 87 行,反向返回 iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 文件“/usr/local/lib/python3.7/site-packages/django/urls/ resolvers.py”,第 685 行,在 _reverse_with_prefix 中引发 NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: 为 'order-add' 反向,未找到任何参数。尝试了 2 种模式:['orders/(?P[^/.]+)/add\.(?P[a-z0-9]+)/?$', 'orders/(?P[^ /.]+)/加/$']
-------------------------------------------------- -------------------- 在 0.000 秒内运行 1 次测试
失败(错误=1)
根据我不需要注册此端点的文档,路由器应该自己完成。我错过了什么?