Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据返回布尔值的模型类上的方法的结果过滤查询集?_Python_Django_Django Orm - Fatal编程技术网

Python 如何根据返回布尔值的模型类上的方法的结果过滤查询集?

Python 如何根据返回布尔值的模型类上的方法的结果过滤查询集?,python,django,django-orm,Python,Django,Django Orm,作为我的一个模型类的成员函数,我有一个返回布尔值的is\u visible(self,user)方法。根据定义,它将请求用户(Djangousermodel)作为输入 我希望能够根据对该方法的响应过滤查询集。如何将此函数用作queryset筛选器 对于上下文,以下是我的is\u visible实现: def is_visible(self, user): if self.status.status_internal == "open": retur

作为我的一个模型类的成员函数,我有一个返回布尔值的
is\u visible(self,user)
方法。根据定义,它将请求用户(Django
user
model)作为输入

我希望能够根据对该方法的响应过滤查询集。如何将此函数用作queryset筛选器

对于上下文,以下是我的
is\u visible
实现:

    def is_visible(self, user):
        if self.status.status_internal == "open":
            return True
        if self.owner == user:
            return true

        participations = Participation.objects.filter(event__id=self.id, participant__id=user.id)
        if len(participations) > 0:
            return True

        if self.status.status_internal == "invite":
            return True

        return False

不能使用python函数筛选queryset。您必须“复制”此代码并使用筛选对象。

可能重复的
qs.annotate().filter(Q(status\u status\u internal\u in=['open','invite']);Q(owner=True))
对于参与,您应该执行类似于
\Q(参与设置\u参与者\u id=user.id)的操作
@imposeren感谢您将一些实际的代码示例放在一起,这样我就可以看到这些示例是如何组合起来的。。我很好奇,一个Q对象可以在一个Q对象中有2个过滤器吗?您已经注意到
Q(参与设置参与者id=user.id)
,但我希望它与
user.id
事件id=self.id
匹配。我想这必须是两个不同的Q对象?
Q
查询可以像
qs.filter
一样使用:
model.objects.filter(Q(参与设置参与者id=user.id,事件id=self.id))
等于
model.objects.filter(Q(参与设置参与者id=user.id)&Q(事件id=self.id))
等于
model.objects.filter(参与设置参与者id=user.id,事件id=self.id)