отсутствует 1 обязательный позиционный аргумент: 'pk' - PullRequest
0 голосов
/ 02 июля 2019

Я новичок в Джанго и реагирую.Я уже сталкивался с этой ошибкой на прошлой неделе, и тогда это была ошибка URL запроса.вчера я изменил дизайн бэкэнда, и теперь его ошибка повторяется.

Вот мой url =>

urlpatterns = [
    url(r'^allowances_mas/', AllowanceAPIView.as_view()),
    url(r'^allowances_mas/(?P<pk>\d+)/$', AllowanceAPIView.as_view()),....

Вот мой метод пут, который изнутри,

def put(self,request,pk):
        save_allowance = get_object_or_404(Allowance.objects.all(),pk=pk)
        data = request.data.get('allowance')
        serializer = AllowanceSerializer(instance=save_allowance,data=data,partial=True)

        if serializer.is_valid():           
            allowance_saved=serializer.save()
            return Response({"success":"Allowance '{}' updated successfully".format(allowance_saved.AllowID)})
        else:
            return Response({"fail":"'{}'".format(serializer.errors)})  

Вот URL-запрос от React axios =>

  axios.put('http://127.0.0.1:8000/api/allowances_mas/1/', { allowance },{
        headers: {
          'Content-Type': 'application/json'
        }
      })
        .then(res => {
          axios.get('http://127.0.0.1:8000/api/allowances_mas/')
          .then(res=>{
            const resallowance=res.data.allowance;  

            this.setState({
              allowances:resallowance 
            });
          })      
        })
        .catch(err=>{
          console.log("error",err);
        })
        .finally(fin=>{
          console.log(fin);
        })

Я могу получить и опубликовать метод, но положить и удалить не могу из-за этой ошибки.Я установил ключ pk, и почему все еще происходит ошибка?Спасибо.

1 Ответ

1 голос
/ 02 июля 2019

Ошибка возникает из-за того, что вы передаете pk как параметр в методе put.

def put(self,request,pk):

Вместо этого используйте это:

def put(self, request, *args, **kwargs):

А для получения pk из переданного URL используйтеэто:

pk = self.kwargs.get('pk')

Таким образом, ваш код должен выглядеть следующим образом:

def put(self,request, *args, **kwargs):
    pk = self.kwargs.get('pk')
    save_allowance = get_object_or_404(Allowance.objects.all(), pk=pk)
    data = request.data.get('allowance')
    serializer = AllowanceSerializer(instance=save_allowance,data=data,partial=True)

    if serializer.is_valid():           
        allowance_saved=serializer.save()
        return Response({"success":"Allowance '{}' updated successfully".format(allowance_saved.AllowID)})
    else:
        return Response({"fail":"'{}'".format(serializer.errors)})  

Кроме того, измените порядок шаблонов URL:

urlpatterns = [
    url(r'^allowances_mas/(?P<pk>\d+)/$', AllowanceAPIView.as_view()),
    url(r'^allowances_mas/', AllowanceAPIView.as_view()), 
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...