在django-rest-framework中使用.to_representation()和.to_internal_value?

时间:2015-12-10 07:48:29

标签: django django-rest-framework

$(x).find(".target").remove(); .to_representation().to_internal_value做了什么? 如果我将数据传递给序列化程序,数据是否先抛出serializers? 这两个用法的用途是什么?

1 个答案:

答案 0 :(得分:18)

如果要创建自定义字段,则需要对Field进行子类化,然后覆盖.to_representation().to_internal_value()方法中的一个或两个。这两种方法用于在初始数据类型和原始可序列化数据类型之间进行转换。原始数据类型通常是数字,字符串,布尔值,日期/时间/日期时间或无。它们也可以是任何列表或字典,如仅包含其他原始对象的对象。可能支持其他类型,具体取决于您使用的渲染器。

调用.to_representation()方法将初始数据类型转换为基本的可序列化数据类型。

调用to_internal_value()方法将原始数据类型恢复为其内部python表示。如果数据无效,此方法应引发serializers.ValidationError。

请注意,版本2.x中存在的WritableField类不再存在。如果字段支持数据输入,则应该对Field进行子类化并覆盖to_internal_value()

价:

  1. http://www.django-rest-framework.org/api-guide/fields/#custom-fields
  2. https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L417