我有三種不同類型的對象:RawArticle
,RawPatent
和RawGrant
。Django REST框架:不同的seizalized對象列表?
我有很棒的工作序列化器,它的基類是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
說:
日期時間對象不是序列化。
任何提示將不勝感激。
非常感謝! JSONRendered做了詭計。 – ChrisR
實際上這會返回一個字符串。 .data之後返回一個列表做了訣竅,我將在下面的答案中解釋。 – ChrisR
這裏缺乏良好的實踐:將序列化登錄與業務實體分開。我建議使用以下方法: 'serialized = [RawArticleSerializer(article,many = False).data for article in all_latest]'並從'RawArticle'類中移除'serialize()'方法 – Rafa0809