繁体   English   中英

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

[英]Django Rest Framework - serializer fields for only deserialization

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

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

然后,在对其进行验证之后,我将向用户显示类似以下内容的内容:

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

是否可以仅使用一个串行器来执行此操作?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM