python - 在 Django Rest Framework 中序列化字符串而不进行更改?

标签 python json django serialization django-rest-framework

我正在使用 Python 的 json.dumps() 将数组转换为字符串,然后将其存储在 Django 模型中。我正在尝试弄清楚如何让 Django 的 REST 框架忽略此字段并“按原样”发送它,而无需再次序列化它。

例如,如果模型如下所示(两个字段都是 CharFields):

name = "E:\"

path_with_ids= "[{"name": "E:\", "id": 525}]"

我希望 REST 框架在序列化时忽略“path_with_ids”,以便 JSON 输出如下所示:

{ "name": "E:\", "path_with_ids": [ {"name": "E:\", "id": 525} ] }

而不是这样:

{ "name": "E:\", "path_with_ids": "[{\"name\": \"E:\\\", \"id\": 525}]" }

我尝试创建另一个序列化器类,它按“原样”输出输入,但没有成功:

序列化器.py:

class PathWithIds(serializers.CharField):

    def to_representation(self, value):

        return value.path_with_ids

class FolderSerializer(serializers.ModelSerializer):

field_to_ignore = PathWithIds(source='path_with_ids')

  class Meta:
      model = Folder
      fields = ['id', 'field_to_ignore']

请帮忙!

最佳答案

我最终使用了一种浪费且令人作呕的方法来反序列化数组,然后再使用 REST 框架再次序列化它:

序列化器.py:

import json
class PathWithIds(serializers.CharField):

    def to_representation(self, value):

        x = json.loads(value)
        return x

class FolderSerializer(serializers.ModelSerializer):

    array_output = PathWithIds(source='field_to_ignore')

      class Meta:
          model = Folder
          fields = ['id', 'array_output']

其余 API 中的输出:

{ "name": "E:\", "array_output": [ { "name": "E:\", "id": 525 } ] }

关于python - 在 Django Rest Framework 中序列化字符串而不进行更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687810/

相关文章:

java - @JsonFormat 不适用于自定义序列化器

python - Anaconda 客户端 CLI 已安装,但未找到 anaconda 命令

python - 如何在使用 Python 的 Multiline 元素内按下按钮时突出显示或选择特定文本字符串?

python - 从 App Engine 数据存储到 JSON 的分层数据输出?

python - 如何使用 django_filters.DateFilter?

Django 代理模型权限不出现

python - Django:显示管理站点的换行符?

python - Flask-RESTful:使用 GET 通过 REST 下载文件

python - C++11 正则表达式混淆

python - 如何将 JSON 数据转换为 Python 对象?