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

Python Django Rest Framework-仅用于反序列化的序列化程序字段,python,json,django,serialization,Python,Json,Django,Serialization,我正在编写一个使用Django Rest框架加密/解密密文的简单API,我想知道是否可以在序列化程序中定义仅用于反序列化(即仅用于验证)的恶魔。例如,我有一个名为Message的模型类,我有一个视图,允许用户创建Message对象。当我调用serializer.is_valid()时,我想检查名为明文的字段是否为空/空,但当我向用户显示消息时,我想将明文字段变成超链接实体字段。换句话说,我希望用户能够发布这样的消息: { "plaintext": "blah", "key": "tun

我正在编写一个使用Django Rest框架加密/解密密文的简单API,我想知道是否可以在序列化程序中定义仅用于反序列化(即仅用于验证)的恶魔。例如,我有一个名为
Message
的模型类,我有一个视图,允许用户创建
Message
对象。当我调用
serializer.is_valid()
时,我想检查名为
明文
的字段是否为空/空,但当我向用户显示
消息
时,我想将
明文
字段变成
超链接实体字段
。换句话说,我希望用户能够发布这样的消息:

{ 
  "plaintext": "blah",
  "key": "tunafish"
}
然后,在验证之后,我会向用户显示如下内容:

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

仅使用一个序列化程序就可以做到这一点吗?

Django Rest Framework序列化程序有两个函数,您可以重写它们以使传入和传出字段具有自定义(不同)行为:
to_internal_value
(来自dict)和
to_representation
(来自Django模型实例)

在您的情况下,我将使该字段成为一个
超链接的实体字段
,并在
中执行您需要的任何工作,以创建实例与
纯文本
实例之间的关系

请参阅有关创建自定义字段api的文档-


或者阅读此处的源代码-

您是否知道如何在不使用硬编码的情况下验证字段长度?例如,如果其中一个字段的max_length=10,我如何从序列化程序(或由模型处理)中验证它@SimonZhu-您可以向序列化程序添加一个字段级别的
validate_field_name
函数:(或者您可以
引发序列化程序。ValidationError()
在您的
内部设置为_内部值
功能)。您还可以向Django模型添加一个验证器,如本SO答案中所述。希望有帮助!