私は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,)
ビュー関数は、リクエストとURLからの引数で呼び出されます。だからそれらを渡します:
response = view(request, pk=1)
私は、perform_createでget_objectメソッドを誤って使用したときに、同様のエラーに遭遇しました。 ドキュメント からこれが間違っている理由を読んでください
perform_create(self,instance):
instance = self.get_object()