我想更改使用HTMLFormRenderer渲染的ModelSerializer字段的默认小部件。字段默认表示是ChoiceField,因为它是模型中的ForeignKey字段。我想把它渲染为CharField。
我试图重新定义序列化程序中的字段:
myField = serializers.CharField()
它在表单中正确显示为文本框,但在保存表单时,我收到错误,指出它无法分配值,因为它必须是相关模型的实例。
我该怎么做?
答案 0 :(得分:0)
一种方法是覆盖序列化程序的to_native
和restore_fields
函数。
restore_fields
基本上允许您处理传入的请求,以您想要的任何方式按摩它并将其保存到模型中。 to_native
允许您获取服务器数据并以任何方式对其进行修改以将其发送到客户端。
答案 1 :(得分:0)
对于necrobumping感到抱歉,但今天我遇到了类似的问题,这个帖子在google搜索结果中跳得很高。似乎可以覆盖style
属性,如下所示:
class MySerializer(serializers.Serializer):
my_field = serializers.SlugRelatedField(
queryset = ...,
style={'base_template': 'input.html'}
)
我查看了HTMLFormRenderer的源代码,它使用了类似的属性:
https://github.com/encode/django-rest-framework/blob/master/rest_framework/renderers.py#L265