На мой взгляд, у меня есть следующее настраиваемое действие:
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 module = self._get_module_from_name (name) Файл /usr/local/lib/python3.7/unittest/loader.py, строка 377, в _get_module_from_name import (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 [^ /.************************************************************]
-------------------------------------------------- -------------------- Выполнить 1 тест за 0,000 с.
НЕ ВЫПОЛНЕНО (ошибки = 1)
согласно документации мне не нужно регистрировать эту конечную точку, маршрутизатор должен делать это сам. Что мне не хватает?
reverse(...)
на уровне модуля и перенесите его на уровень вашего класса - person JPG   schedule 02.03.2021