如果该对象的布尔字段设置为true,如何从查询集中删除对象?我需要从查询集中删除它,因为我后来用DRF序列化它。
qs = Post.objects.all()
for post in qs:
if post.private == True and post.user.pk != request.user.pk:
post.remove()
我无法使用exclude()
,因为我需要条件来检查对象(用户)的所有者是否经过身份验证,以及对象是否设置为私有。
答案 0 :(得分: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
允许您构建更复杂的查询,如果您不熟悉,可以将上述查询读作“公共帖子或属于该用户的私人帖子”