Chr*_*isR 5 django serialization json django-rest-framework
我有三种不同类型的对象:RawArticle、RawPatent和RawGrant。
我有很棒的工作序列化器,其基类是serializers.ModelSerializer.
如果我检索一个查询集,RawArticle我可以将其直接传递给序列化器,many=True并且输出是名义上的:
[{"save_link": "...", "published": "2014-01-18T20:39:54.086Z", }, {"save_link": "...", "published": "..."}, ...]
Run Code Online (Sandbox Code Playgroud)
该响应由以下代码生成:
return Response(RawArticleSerializer(articles, many=True).data)
Run Code Online (Sandbox Code Playgroud)
现在我有了三个不同的对象,我想像上面一样将它们与它们各自的对象链接起来。
到目前为止我还没有成功。我最初的想法是简单地创建序列化对象的列表并返回该列表(当然是序列化的),如下所示:
all_latest = user_latest(request)['latest_articles']
available_serializers = {RawArticle: RawArticleSerializer, RawGrant: RawGrantSerializer, RawPatent: RawPatentSerializer}
serialized = []
for article in all_latest:
serialized.append((available_serializers[type(article)](article, many=False)).data)
return Response(str(serialized))
Run Code Online (Sandbox Code Playgroud)
上面的代码不返回 JSON,并且日期时间不会转换为字符串形式的实际日期和时间。
我最近的尝试是使用 json.dumps 和 simplejson ,两者都提出了一个TypeError说法:
日期时间对象不可序列化。
任何提示将不胜感激。
Sunny 的答案将返回 JSON 作为字符串(用双引号括起来)。为了避免这种情况,返回列表可以满足我的需要:
serialized = []
AVAILABLE_SERIALIZERS = {RawArticle: RawArticleSerializer, RawGrant: RawGrantSerializer, RawPatent: RawPatentSerializer}
for article in articles:
serialized.append((AVAILABLE_SERIALIZERS[type(article)](article, many=False)).data)
return Response(serialized)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |