2016-04-21 40 views
1

如果該對象的布爾值字段設置爲true,如何從查詢集中刪除對象?我需要從查詢集中刪除它,因爲我稍後使用DRF序列化它。如果對象是私有的,則排除對象

qs = Post.objects.all() 

for post in qs: 
    if post.private == True and post.user.pk != request.user.pk: 
     post.remove() 

我不能使用exclude()爲我所需要的條件,只要檢查對象(用戶)的所有者是一個認證,如果對象設置爲私人。

回答

2

與其取消所有帖子,然後刪除不屬於用戶的私人帖子,取消所有公開帖子並添加用戶可以看到的私人帖子。

from django.db.models import Q 

if request.user.is_authenticated(): 
    # Return public (private=False), and private posts of the user 
    visible_posts = Post.objects.filter(Q(private=False) | 
             Q(private=True, user=request.user)) 
else: 
    # Only return public posts 
    visible_posts = Post.objects.filter(private=False) 

如果沒有通過身份驗證的用戶,只需

Q讓您形成更復雜的查詢,如果你不熟悉,可以看上面的查詢爲「公共職位或私人職位屬於用戶「

+0

這在AnonymousUser上拋出異常 –

+0

如果用戶匿名只是用公共帖子,'Post.objects.filter(private = False)' – bakkal