我正在使用 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/