我正在编写一个简单的API,用于使用Django Rest框架加密/解密密文,我想知道是否可以在序列化程序中定义仅用于反序列化(即仅用于验证)的函数。例如,我有一个名为Message的模型类,我有一个视图,允许用户创建Message对象。当我调用serializer.is_valid()时,我想检查一个名为plaintext的字段是否为空/空,但是当我向用户显示一个Message时,我希望将plaintext字段变成一个HyperlinkedIdentityField,而不是直接显示它。换句话说,我希望用户能够发布这样的消息:
{
"plaintext": "blah",
"key": "tunafish"
}然后,在对其进行验证之后,我将向用户展示如下内容:
{
"plaintext": "link/to/plaintext",
"ciphertext": "link/to/ciphertext",
"key": "tunafish"
}仅用一个序列化程序就可以做到这一点吗?
发布于 2016-02-19 04:02:53
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的文档。
或者在这里阅读源代码- framework/serializers.py
https://stackoverflow.com/questions/35496952
复制相似问题