Подтвердить что ты не робот

Возвращать результаты из нескольких моделей с помощью Django REST Framework

У меня есть три модели - статьи, авторы и твиты. В конечном итоге мне нужно использовать Django REST Framework для создания фида, который объединяет все объекты с использованием моделей Article и Tweet в один обратный хронологический канал.

Любая идея, как я это сделаю? Мне кажется, что мне нужно создать новый сериализатор, но я действительно не уверен.

Спасибо!

Изменить: Вот что я сделал до сих пор.

Приложение/serializers.py:

class TimelineSerializer(serializers.Serializer):
    pk = serializers.Field()
    title = serializers.CharField()
    author = serializers.RelatedField()
    pub_date = serializers.DateTimeField()

Приложение/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
4b9b3361

Ответ 1

Он выглядит довольно близко ко мне. Я не использовал ViewSets в DRF лично, но я думаю, что если вы измените свой код на это, вы должны где-то попасть (извините - не проверено ни одно из них):

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 в список для этого.