gpt4 book ai didi

Django REST 框架 : list of different serizalized objects?

转载 作者:行者123 更新时间:2023-12-01 09:06:26 25 4
gpt4 key购买 nike

我有三种不同类型的对象:RawArticleRawPatentRawGrant

我有很棒的序列化程序,其基类是 serializers.ModelSerializer

如果我检索 RawArticle 的查询集,我可以使用 many=True 将其直接传递给序列化程序,并且输出是名义上的:

[{"save_link": "...", "published": "2014-01-18T20:39:54.086Z", }, {"save_link": "...", "published": "..."}, ...]

此响应由以下代码生成:

return Response(RawArticleSerializer(articles, many=True).data)

现在我有了三个不同的对象,我想像上面一样将它们与它们各自的对象链接起来。

到目前为止我还没有成功。我最初的想法是简单地创建一个序列化对象列表并返回它(当然是序列化的),如下所示:

    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))

上面的代码不返回 JSON,日期时间也没有转换为字符串形式的实际日期和时间。

我最近的尝试是使用 json.dumps 和 simplejson 并且都引发了一个 TypeError 说:

date time object is not serializable.

任何提示将不胜感激。

最佳答案

就个人而言,为了处理序列化器,我在我的模型中创建了一个 serialize 方法。此方法依次调用适当的代码来序列化数据。

在这种情况下,代码如下所示:

class RawArticle(models.Model):
def serialize(self):
return RawArticleSerializer(self, many=False).data

然后,在您的主要代码中:

from rest_framework.renderers import JSONRenderer

all_latest = user_latest(request)['latest_articles']

serialized = [article.serialize() for article in all_latest]
return Response(JSONRenderer().render(serialized))

即使对象不是模型,这种方法仍然有效。

关于Django REST 框架 : list of different serizalized objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com