Django的REST框架不会显示在PUT形式值(Django REST Framework doe

2019-09-26 19:38发布

昨天我张贴的问题 ,并找到了解决这一问题。 然而,该解决方案所造成的另一个问题。
请看看这个问题,所以我没有重复的内容。

在可浏览的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_NAME”。

我戳周围的源代码,并发现该形式的文件中呈现renderers.py按照下面的顺序:

  • 在类BrowsableAPIRenderer方法get_context创建窗体,并调用方法get_rendered_html_form
  • 该方法get_rendered_html_form调用该方法render_form_for_serializer
  • 该方法render_form_for_serializer调用该方法render之类的HTMLFormRenderer

但我仍然不知道在哪里干涉,我应该改变。

此外,我试图执行方法to_internal_value在串行器,但是这仅仅是为反序列化和具有无关的形式呈现。

有没有人有一个想法,问题出在哪里,什么可以做?

UPDATE

我创建了GitHub的回购协议的代码。 您可以克隆它或叉子,并设法帮助我。
非常感谢!

Answer 1:

我摸索出另一种方式这似乎是工作对我罚款。 这是定义在类外串行类字段:

class SpeciesSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Species
        fields = (
            'url', 'id', 'canonical_name', 'slug',  'species', 'genus',
            'subfamily', 'family', 'order','class', 'phylum',
            'ncbi_id', 'ncbi_taxonomy',
        )
        read_only_fields = ('slug',)
        extra_kwargs = {
            'url': {'lookup_field': 'slug'}
        }

SpeciesSerializer._declared_fields["class"] = serializers.CharField(source="class_name")

之后,这两个原始数据和HTML表单看起来不错:



文章来源: Django REST Framework doesn't display value in PUT form