【问题标题】:Django rest Framework sending json to api endpoint within another class-based viewDjango rest Framework 将 json 发送到另一个基于类的视图中的 api 端点
【发布时间】:2018-04-29 14:15:41
【问题描述】:

我想从 CBV 中发布到端点并检索响应(以访问已创建资源的 id)。我查看了How to programmatically call a Django Rest Framework view within another view?,但找不到如何通过请求对象发送字段值。 request.data 是不可变的,通过 kwargs 似乎没有做任何事情:

from app.views import OtherViewSet

class NewViews(APIView):
   def post(self, request, *args, **kwargs):
       # kwargs value here is {'field1':1, 'field2':2...}
       view_func = OtherViewSet({'post':'create'})
       response = view_func(self.request, *args, **kwargs).data

虽然 kwargs 包含字段值(通过几个 url 命名组设置),但响应始终如下所示:

{'field1': ['This field is required'], 'field2':['This field is required...

我做错了什么?谢谢大家:)

编辑: 获得创建资源的 ID 后,我想检索以特定(自定义)格式呈现的资源(我不想返回上面的响应对象)。

【问题讨论】:

  • 为什么不使用特定的序列化器,它可能会重用来自OtherViewSet的序列化器???
  • @GabrielMuj 你能在这里举个例子吗?我不确定这会是什么样子 - 我需要在此视图中向 OtherViewSet 的创建端点发出请求后访问数据。
  • 能否提供OtherViewSet 的序列化程序以及NewView 需要哪些数据?
  • 我可以,但它似乎并不特别干燥。我还想以特定格式返回结果,因此需要通过我们的自定义渲染器之一渲染响应。
  • 我在想也许您可以通过子类化来重用来自Otherviewset 的序列化程序。

标签: django django-rest-framework


【解决方案1】:

views.py

from app.views import OtherViewSet

class NewViews(APIView):
    def post(self, request, *args, **kwargs):
        view = OtherViewSet.as_view({'post':'create'})
        response = view(request, *args, **kwargs)
        return response

【讨论】:

  • 我得到:django.http.request.RawPostDataException:从请求的数据流中读取后,您无法访问正文。但是,我需要从响应中访问数据,而不是返回它。
猜你喜欢
  • 2019-04-22
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2021-09-13
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多