如果对象是私有的则排除对象

Exclude object if object is private

如果某个对象的布尔字段设置为 true,我如何从查询集中删除该对象?我需要将其从查询集中删除,因为我稍后将使用 DRF 对其进行序列化。

qs = Post.objects.all()

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

我无法使用 exclude(),因为我需要条件来检查对象(用户)的所有者是否经过身份验证以及对象是否设置为私有。

不是提取所有帖子,然后删除不属于用户的私人帖子,而是提取所有 public 帖子并添加用户可以看到的私人帖子。

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允许你形成更复杂的查询,如果你不熟悉,你可以阅读上面的查询作为"public posts or private posts belonging to the user"