У меня есть три разных типа объектов: RawArticle
, RawPatent
и RawGrant
.Django REST Framework: список различных сериализованных объектов?
У меня есть большие рабочие сериализаторы, базовый класс которых 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 (статья, много = False) .data для статьи в all_latest]' и удалить метод serialize() из класса 'RawArticle' – Rafa0809