記事、著者、ツイートの3つのモデルがあります。最終的にDjango=REST Frameworkを使用して、ArticleモデルとTweetモデルを使用してすべてのオブジェクトを1つの逆時系列フィードに集約するフィードを構築するフレームワークです。
私はそれをどのように行うのでしょうか?新しいシリアライザーを作成する必要があると感じていますが、実際にはわかりません。
ありがとう!
編集:これまでにやったことがあります。
app/serializers.py:
class TimelineSerializer(serializers.Serializer):
pk = serializers.Field()
title = serializers.CharField()
author = serializers.RelatedField()
pub_date = serializers.DateTimeField()
app/views.py:
class TimelineViewSet(viewsets.ModelViewSet):
"""
API endpoint that lists all Tweet/article objects in rev-chrono.
"""
queryset = itertools.chain(Tweet.objects.all(), Article.objects.all())
serializer_class = TimelineSerializer
私にはかなり似ています。私は個人的にDRFでViewSetsを使用していませんが、コードをこれに変更した場合はどこかに行くべきだと思います(ごめんなさい-これらのいずれもテストされていません):
class TimelineViewSet(viewsets.ModelViewSet):
"""
API endpoint that lists all Tweet/article objects in rev-chrono.
"""
def list(self, request):
queryset = list(itertools.chain(Tweet.objects.all(), Article.objects.all()))
serializer = TimelineSerializer(queryset, many=True)
return Response(serializer.data)
ViewSetを使用することに慣れていない場合は、generics.ListAPIView
はもう少し簡単です。
class TimeLineList(generics.ListAPIView):
serializer_class = TimeLineSerializer
def get_queryset(self):
return list(itertools.chain(Tweet.objects.all(), Article.objects.all()))
これを機能させるには、chain
の出力をリストに変換する必要があることに注意してください。