2012-09-17 111 views
0

如何在通过Tastypie为特定用户返回某些内容之前进行一些处理?Tastypie中的高级筛选

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

因此,假设在Tastypie中我想从此人的时间轴中获得最新的20篇文章:我需要获取用户,处理这些信息并以JSON格式返回,但我并不确定我如何处理这个问题并使用Tastypie回报它。

任何帮助?

回答

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()在最终的超集)。

+0

很酷,现在就试试。还有一个问题:是否可以通过通过url传递的内容获取用户?我了解基本过滤使用URL来获取属性 - 我如何在上面的示例中使用该用户? – arooo

+0

当您使用内置于Django中的验证机制时,用户将存储在会话中。所以你可以从通过方法调用来的请求对象中获取它。例如:.filter(author = User.objects.get(user = request.user)。如果您使用的是Django身份验证,则request.user调用会让您成为用户,如下所示:https:// docs。 djangoproject.com/en/dev/topics/auth/ – Mario

+0

我的意思是更多的特定用户,如果我想传递一个用户名并获得该用户的特定职位 – arooo