如果对象是私有的则排除对象
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"
如果某个对象的布尔字段设置为 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"