【问题标题】:Django rest framework: how to change default widget of a ModelSerializer renderer with HTMLFormRenderer?Django rest 框架:如何使用 HTMLFormRenderer 更改 ModelSerializer 渲染器的默认小部件?
【发布时间】:2014-11-26 15:12:52
【问题描述】:

我想更改使用 HTMLFormRenderer 渲染的 ModelSerializer 字段的默认小部件。字段默认表示是 ChoiceField,因为它是模型中的 ForeignKey 字段。我想将其渲染为 CharField。

我已经尝试重新定义序列化器中的字段:

myField = serializers.CharField()

它在表单中正确显示为文本框,但在保存表单时我收到一条错误消息,指出它无法分配值,因为它必须是相关模型的实例。

我该怎么做?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    抱歉,necrobumping,但我今天遇到了类似的问题,这个帖子在谷歌搜索结果中跳得很高。似乎可以覆盖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

    【讨论】:

      【解决方案2】:

      一种方法是覆盖序列化程序的to_nativerestore_fields 函数。

      restore_fields 基本上可以让您处理传入的请求,以您想要的任何方式对其进行按摩并将其保存到模型中。 to_native 允许您获取服务器数据并以任何方式对其进行修改以将其发送到客户端。

      【讨论】:

      • 你指的是 restore_object 函数而不是 restore_data 吗?
      • 有没有做类似事情的例子?
      • 对不起,是restore_fields
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2016-11-22
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多