我有三种模式——文章、作者和推文.我最终需要使用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中使用ViewSet,但我认为如果您将代码更改为这个,您应该找到一些地方(抱歉,这两个都没有经过测试):

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

Django相关问答推荐

如何创建为模型创建信号的Djangodecorator ?

django优化查询

如何保护单个数据库行/模型实例?

如何使用具有某些权限的 Django 组的转储数据和加载数据?

如何在Django中制作一个不 Select 以前日期的日期 Select 器

在 Django Rest Framework 视图中,request.user 是在请求​​到达视图之前进行数据库调用还是数据库调用发生?

Django ORM __in 但不是精确的,包含不区分大小写的?

基于每个条目的 Django Queryset 过滤

我的 django 模板布尔变量在 javascript 中没有按预期工作

Django Facebook Connect 应用推荐

无法通过 pip 安装 Django 2.0

django - 如何在验证之前处理/清理字段

has_object_permission 和 has_permission 有什么区别?

如何使用 django-nose 运行单个测试或单个 TestCase?

清理提交的表单数据中的 HTML

在 Mac OS X 上安装支持 JPEG 的 PIL

如何测试 Django QuerySets 是否相等?

Django:在还原(迁移)后try 访问数据库时权限被拒绝

使用 request.user 的 Django 和中间件始终是匿名的

防止 django 管理员转义 html