2012-09-17 113 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