web-dev-qa-db-ja.com

「pk」という名前のURLキーワード引数で呼び出される予定のビュー

私はDjango Rest Frameworkビューのテストを書いています テストドキュメント

これが私の簡単なテストです:

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 kwargsはURLにあり、
  • ドキュメントによると、pkがデフォルトの場合、lookup-field値を明示的に追加する必要はありません。
  • ビューは正しく開きますが、このテストは失敗します...

誰かがこのエラーが発生する理由を説明できますか?

関連するコードは次のとおりです。

「メイン」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,) 
20
user1544500

ビュー関数は、リクエストとURLからの引数で呼び出されます。だからそれらを渡します:

response = view(request, pk=1)
28
RemcoGerlich

私は、perform_createでget_objectメソッドを誤って使用したときに、同様のエラーに遭遇しました。 ドキュメント からこれが間違っている理由を読んでください

perform_create(self,instance):
      instance = self.get_object()
0
7guyo