43

記事、著者、ツイートの 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
4

1 に答える 1

27

それは私にかなり近いように見えます。私は 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これを機能させるには、の出力をリストに変換する必要があることに注意してください。

于 2013-09-09T17:35:11.173 に答える