繁体   English   中英

如何使用 django rest 框架中的特定 id 访问 model 的数据

[英]How to access the Data of an model using particular id in django rest framework

我想通过使用它在 django rest 框架中的 ID 来访问被命名为 IssueReport 的 model 的数据,所以我使用了通过 ID 手动传递 ID 的 post 方法来获取错误,但手动报告数据给了我错误

Method Not Allowed: /app/auth/getissuereport/
[10/Aug/2022 23:26:21] "GET /app/auth/getissuereport/ HTTP/1.1" 405 7036
Internal Server Error: /app/auth/getissuereport/
Traceback (most recent call last):
  File "D:\MMRDA\.venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "D:\MMRDA\.venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\MMRDA\.venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "D:\MMRDA\.venv\lib\site-packages\django\views\generic\base.py", line 84, in view
    return self.dispatch(request, *args, **kwargs)
  File "D:\MMRDA\.venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "D:\MMRDA\.venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "D:\MMRDA\.venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "D:\MMRDA\.venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "D:\MMRDA\mmrda\apis\views.py", line 195, in post
    report=IssueReport.objects.get(pk=id)
  File "D:\MMRDA\.venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "D:\MMRDA\.venv\lib\site-packages\django\db\models\query.py", line 496, in get
    raise self.model.DoesNotExist(
DataSet.models.IssueReport.DoesNotExist: IssueReport matching query does not exist.

这是我的views.py,

class GetIssueReportById(generics.GenericAPIView):

    serializer_class=GetIssueReportSerializer
    def post(self,request,*args,**kwargs):
        serializer=self.get_serializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            id=serializer.data.get('id')
            report=IssueReport.objects.get(pk=id)
            data=IssueReportSerializer(report,context=self.get_serializer_context()).data
            return Response({
                'message':"Data Fetched successfully",
                'status':"success",
                'data':data,
                },status=status.HTTP_200_OK)
        else:
            return Response({
                'message':"Data not fetched",
                'status':status.HTTP_400_BAD_REQUEST
                })

这是我的serializers.py,

class IssueReportSerializer(serializers.ModelSerializer):
    class Meta:
        model=IssueReport
        fields='__all__'

class GetIssueReportSerializer(serializers.ModelSerializer):
    class Meta:
        model=IssueReport
        fields=('id',)

所以有人可以帮助我通过仅使用 ID 或任何其他方式访问数据,提前谢谢你。

您显然向您的服务器发送了GET请求,但是在class GetIssueReportById(generics.GenericAPIView):您只声明了post方法。

要么在class GetIssueReportById中定义def get():方法,要么向服务器发送POST请求(可能与来自浏览器插件或 VS Code 插件的某些 REST 客户端一起使用)。 如果您使用id=serializer.data.get('id')获得id参数,则id字段必须在POST正文中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM