Django DRF:数据未通过修补方法传递到kwargs
我正在为我的应用程序创建更新评论视图。这是我的代码: 序列化程序.pyDjango DRF:数据未通过修补方法传递到kwargs,django,django-rest-framework,Django,Django Rest Framework,我正在为我的应用程序创建更新评论视图。这是我的代码: 序列化程序.py class CommentSerializer(serializers.ModelSerializer): class Meta: model = FitnessRecord fields = ('comment', 'id') class AddCommentView(APIView): permission_classes = [IsAuthenticated]
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = FitnessRecord
fields = ('comment', 'id')
class AddCommentView(APIView):
permission_classes = [IsAuthenticated]
def patch(self, request, *args, **kwargs):
print(kwargs) # this is printing {}
instance = get_object_or_404(FitnessRecord, pk=kwargs.get('id')) # error line
print(22222) # not printing
serializer = CommentSerializer(instance, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(CommentSerializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
视图.py
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = FitnessRecord
fields = ('comment', 'id')
class AddCommentView(APIView):
permission_classes = [IsAuthenticated]
def patch(self, request, *args, **kwargs):
print(kwargs) # this is printing {}
instance = get_object_or_404(FitnessRecord, pk=kwargs.get('id')) # error line
print(22222) # not printing
serializer = CommentSerializer(instance, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(CommentSerializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我用邮递员发送数据。这就是错误:
{
"detail": "Not found."
}
这可能是因为kwargs为空
我正在传递这些数据
{
"comment": "gotham#bw9",
"id": 14
}
如果需要,这是DRF设置
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DATE_INPUT_FORMATS': ['%d-%m-%Y'],
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
您应该在url中传递kwarg
id
。见下面的例子
网址:
http://localhost:8000/comment/14/
请求方法:补丁
数据:
{
“评论”:“gotham#bw9”,
}
您应该在url中传递kwargid
。见下面的例子
网址:
http://localhost:8000/comment/14/
请求方法:补丁
数据:
{
“评论”:“gotham#bw9”,
}
您可以通过请求获得发送的有效负载。数据
def补丁(self、request、*args、**kwargs):
print(request.data)#这将打印{“comment”:“gotham#bw9”,“id”:14}
...
您可以通过请求获得发送的有效负载。数据
def补丁(self、request、*args、**kwargs):
print(request.data)#这将打印{“comment”:“gotham#bw9”,“id”:14}
...
< /代码>您正在传递的数据是请求正文,它将在请求数据中访问,而不是在KWARGSH中。请附加您的URLS.PY,也许您没有考虑通过<代码> ID >代码>。您正在传递的数据是请求正文,它将在请求数据中访问而不是在KWARGSH中。请附加您的URLS.PY,也许你没有考虑通过<代码> ID >代码>。我已经尝试过了。在添加url:path('add_comment/',views.AddCommentView.as_view())和url但此给定页面未找到错误时,我将url更改为:path('add_comment/',views.AddCommentView.as_view(),name='add_comment'),然后再次出现“未找到”错误。我已尝试此操作。在添加url:path('add_comment/',views.AddCommentView.as_view())和url但此给定页面未找到错误时,我将url更改为:path('add_comment/',views.AddCommentView.as_view(),name='add_comment'),再次出现“未找到”错误。