Tastypie中的高级过滤

时间:2012-09-17 09:20:10

标签: python django tastypie

如何在通过Tastypie为特定用户返回内容之前进行一些处理?

例如,假设我有一个用户有帖子的应用,也可以关注其他人的帖子。我想把这个人的帖子和他们关注的人的帖子结合起来,并将其作为一个数组返回。

所以让我们说在Tastypie中我想从这个人的时间线上得到最新的20个帖子:我需要得到用户,处理这些信息并以JSON格式返回,但我不确定如何我会处理这个并使用Tastypie返回它。

任何帮助?

1 个答案:

答案 0 :(得分:3)

在get_object_list中执行更复杂的处理。它在脱水过程开始之前被调用,即在创建的JSON被传回之前被调用。

class PostResource(ModelResource):
    class Meta:
        queryset = Post.objects.all()

    def get_object_list(self, request):
        this_users_posts = super(PostResource, self).get_object_list(request).filter(user=User.objects.get(user=request.user))
        all_the_posts_this_user_follows = super(PostResource, self).get_object_list(request).filter(follower=User.objects.get(user=request.user))

        return this_users_posts | all_the_posts_this_user_follows

您需要修复这些查询,以便它们适用于您的特定情况。然后诀窍是通过连接它们来组合你得到的两个不同的查询集。使用|得到他们的全套,使用&只得到他们的重叠。你想要全套(除非用户也可以关注他们自己的帖子,然后你可以在生成的超集上调用distinct())。