python - 使用 Django REST 框架从多个模型返回结果

标签 python django django-models django-views django-rest-framework

我有三个模型——文章、作者和推文。我最终需要使用 Django REST 框架来构建一个提要,该提要将使用文章和推文模型的所有对象聚合到一个逆时间顺序提要中。

知道我会怎么做吗?我觉得我需要创建一个新的序列化程序,但我真的不确定。

谢谢!

编辑:这是我到目前为止所做的。

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 的输出转换为列表才能正常工作。

关于python - 使用 Django REST 框架从多个模型返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702300/

相关文章:

python - 如何在 Python 3 中对字符串类型的变量进行 base64 编码/解码?

django-orm 不区分大小写的分组依据

python - django-rest-framework-gis 相关领域

python - 如何修复 Django 中的错误 "invalid literal for int() with base 10: ' Independence'?

Python 在(子)函数内传递变量

python - 将索引和字符串连接到新列

python - 绘制神经网络

python - 如果该对象的创建者是请求用户,则 Django 会排除管理中的字段

mysql - SQL 中 bool 型与整数的最佳实践

mysql - 如何在不同的数据库中使用带有外键的 django 模型?