【发布时间】:2018-05-19 04:13:04
【问题描述】:
昨天我发布了question 并找到了解决该问题的方法。然而,该解决方案引发了另一个问题。
请看问题,所以我不必复制内容。
在 Browsable API 中,“class_name”的值不会显示在 PUT 表单中。
呈现的 HTML 如下所示:
<div class="form-group ">
<label class="col-sm-2 control-label ">
Class
</label>
<div class="col-sm-10">
<input name="class_name" class="form-control" type="text">
</div>
</div>
对于其他字段,它会正确显示值,例如:
<div class="form-group ">
<label class="col-sm-2 control-label ">
Order
</label>
<div class="col-sm-10">
<input name="order" class="form-control" value="Carnivora" type="text">
</div>
</div>
您可以看到键“class”的值在那里。输入元素的名称以及模型中的字段名称为“class_name”。
我翻了一下源代码,发现表格在文件renderers.py中呈现的顺序如下:
- 在
BrowsableAPIRenderer类中,方法get_context创建表单并调用方法get_rendered_html_form。 - 方法
get_rendered_html_form调用方法render_form_for_serializer。 - 方法
render_form_for_serializer调用类HTMLFormRenderer的方法render。
但我仍然不知道该从哪里干预,应该改变什么。
我也尝试在序列化器中实现to_internal_value方法,但这只是为了反序列化,与表单渲染无关。
有谁知道问题出在哪里以及可以做些什么?
更新
我已经使用代码创建了 GitHub repo。您可以克隆它或分叉它并尝试帮助我。
非常感谢!
【问题讨论】:
-
你能提供一个repo来调试吗?最明显的问题可能是渲染器代码尝试使用
class_name而不是class需要调试可以覆盖的位置。所以如果你提供一个 repo 来调试会更容易 -
@TarunLalwani 感谢您的回复!是的,这就是问题所在,但我不知道在哪里进行干预。你对回购有什么具体的建议吗?否则我会把代码示例放在 GitHub 上。
-
@TarunLalwani 我在 GitHub 上创建了一个仓库。请检查更新的答案。
标签: python django django-rest-framework