Ожидаемое представление будет вызываться с аргументом ключевого слова URL с именем " pk"

Я пишу тест для представления фреймворка Django Rest, внимательно следуя документация по тестированию

вот мой простой тест:

def test_patient_detail_api_opens(self):
    factory = APIRequestFactory()
    view =PatientDetailApi.as_view()
    request = factory.get(reverse('api_pacjent', kwargs={'pk' :1}))
    force_authenticate(request, user=self.user)
    response = view(request)
    self.assertEqual(response.status_code, 200)

этот тест завершается со следующим сообщением:

AssertionError: Expected view PatientDetailApi to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.

Я не понимаю, почему это происходит и как это исправить.

  • на pk кварги есть в URL,
  • согласно документам, нет необходимости добавлять lookup-field значение явно, если по умолчанию pk,
  • представление открывается правильно, но этот тест не выполняется...

кто-нибудь может объяснить, почему эта ошибка возникает?

вот соответствующий код:

' main'url.py:

urlpatterns = [
    url(r'^pacjent/', include('pacjent.urls')),
] 

pacjent.urls выглядит так:

url(r'^api/szczegoly/(?P<pk>d+)/$', PatientDetailApi.as_view(), name="api_pacjent"),

и PatientDetailApi это:

class PatientDetailApi(generics.RetrieveUpdateAPIView):
    model = Patient
    serializer_class = PatientDetailsSerializer
    queryset = Patient.objects.all()

    authentication_classes = (SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticated,) 

1 ответов


функции просмотра вызываются с запросом и аргументами из URL-адреса. Так передайте им:

response = view(request, pk=1)