gpt4 book ai didi

python - 如果对象是私有(private)的,则排除对象

转载 作者:行者123 更新时间:2023-12-01 03:59:51 25 4
gpt4 key购买 nike

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

qs = Post.objects.all()

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

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

最佳答案

不要拉取所有帖子,然后删除不属于用户的私有(private)帖子,而是拉取所有公共(public)帖子并添加用户可以看到的私有(private)帖子。

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 允许您形成更复杂的查询,如果您不熟悉,您可以将上面的查询理解为“属于用户的公开帖子或私有(private)帖子”

关于python - 如果对象是私有(private)的,则排除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com