sko*_*per 5 django django-rest-framework
Django Rest Framework 附带一个渲染器,用于从序列化器返回 HTML 表单[1]。在仔细阅读文档和代码之后,我仍然无法弄清楚如何让它呈现空白表单。
我不知道如何实例化空白序列化器。在 DRF 的文档中,他们说序列化器具有与 django 表单非常相似的 API。当您想要在模板中使用空白表单时,可以使用 MyForm() 实例化一个表单并将其传递到模板上下文。但是,当我尝试使用序列化器时,.data 属性只是{'detail': 'Not Found.'}
我觉得我一定错过了一些非常明显的东西,因为渲染空白表单似乎是 HTMLFormRenderer 的一个非常重要的用例。
class CustomViewSet(ModelViewSet):
lookup_field = 'id'
pagination_class = MyCustomPagination
serializer_class = MyModelSerializer
renderer_classes = (JSONRenderer, BrowsableAPIRenderer, HTMLFormRenderer)
def create(self, request, *args, **kwargs):
# return an html form for GET requests to /api/my_model/create/.form
Run Code Online (Sandbox Code Playgroud)
我很确定我已经将 urlconf 连接正确,请求最终出现在正确的位置,因为当我 GET 时,/api/my_model/<pk>/.form我会收到一个表单作为响应,并预先输入模型属性。我只是想要一种获得空白表格的方法......
我设法在我的视图集上使用以下方法返回表单的 html 片段:
class CustomViewSet(ModelViewSet):
@list_route()
def form(self, request, *args, **kwargs):
serializer = self.get_serializer()
renderer = HTMLFormRenderer()
form_html = renderer.render(serializer.data, renderer_context={
'template': 'rest_framework/api_form.html',
'request': request
})
return HttpResponse(form_html)
Run Code Online (Sandbox Code Playgroud)
我需要使用普通的 django HttpResponse,而不是休息框架的 Response 对象,以防止 Response 对象尝试使用视图集的默认渲染器重新渲染 form_html。另外,需要list_route装饰器来获取rest_framework的DefaultRouter来添加端点my_model/form/,这并不意味着视图必须返回列表。
| 归档时间: |
|
| 查看次数: |
9356 次 |
| 最近记录: |