我正在编写一个简单的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"
}
是否可以仅使用一个序列化程序执行此操作?
答案 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