Django Rest Framework - 仅用于反序列化的序列化器字段

时间:2016-02-19 03:48:16

标签: python json django serialization

我正在编写一个简单的API,用于使用Django Rest Framework加密/解密密文,我想知道是否可以在序列化器中定义仅用于反序列化的恶魔(即仅用于验证)。例如,我有一个名为Message的模型类,我有一个允许用户创建Message个对象的视图。当我调用serializer.is_valid()时,我想检查名为plaintext的字段是否为空/空,但当我向用户显示Message时,我想要plaintext 1}}字段转换为HyperlinkedIdentityField而不是直接显示它。换句话说,我希望用户能够发布如下消息:

{ 
  "plaintext": "blah",
  "key": "tunafish"
}

然后,在验证之后,我会向用户显示如下内容:

{
  "plaintext": "link/to/plaintext",
  "ciphertext": "link/to/ciphertext",
  "key": "tunafish"
}

是否可以仅使用一个序列化程序执行此操作?

1 个答案:

答案 0 :(得分:0)

Django Rest Framework序列化程序有两个函数可以覆盖,以便为传入和传出字段提供自定义(不同)行为:to_internal_value(来自dict)和to_representation(来自django模型实例)

在您的情况下,我会将字段设为HyperlinkedIdentityField,并在to_internal_value中执行您需要的任何工作,以创建实例与plaintext实例之间的关系。

请参阅有关创建自定义字段api的文档 - http://www.django-rest-framework.org/topics/3.0-announcement/#changes-to-the-custom-field-api

或阅读此处的来源 - https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py