Ваши get
и post
подписи принимают только параметры self
и request
, тогда как они должны включать параметр pk
вашего URL.Поскольку вы определили одно и то же представление для URL без параметра pk
, вы должны сделать эти параметры необязательными (поэтому добавьте значение по умолчанию, если они отсутствуют).Например:
class PostView(APIView):
permission_classes = (IsAuthenticated,)
def get_object(self,pk,user_id):
# ...
pass
def get(self,request<b>, pk=None</b>):
# ...
pass
def put(self, request, pk<b>=None</b>):
# ...
pass
def post(self,request<b>, pk=None</b>):
# ...
pass
Альтернативой является предоставление kwargs
в URL с отсутствующим параметром, например:
<b>path</b>(r'posts',PostView.as_view()<b>, kwargs={'pk': None}</b>),
<b>path</b>(r'posts/<int:pk>/',PostView.as_view())
или для pre- django-2.0 установки, вы должны определить это как регулярное выражение:
<b>url</b>(r'^posts/$',PostView.as_view()<b>, kwargs={'pk': None}</b>),
<b>url</b>(r'^posts/<b>(?P<pk>[0-9]+)</b>/',PostView.as_view())