Python django中会话的预筛选查询

Python django中会话的预筛选查询,python,python-3.x,django,django-models,Python,Python 3.x,Django,Django Models,目前,我有一个唯一的UUID绑定到所有模型,包括与用户模型的一对一关系。为了基于此UUID筛选数据,我将UUID保存为登录用户的会话变量,然后在视图中 data = Model.objects.filter(unique_num=request.session.get('unique_num')) 是否可以对这些查询进行预筛选?例如,如果用户登录,我应该能够 data = Model.objects.filter() 而且它应该只显示相关数据。因为您不能为此编写一个,因为管理器是在类初始化期

目前,我有一个唯一的UUID绑定到所有模型,包括与用户模型的一对一关系。为了基于此UUID筛选数据,我将UUID保存为登录用户的会话变量,然后在视图中

data = Model.objects.filter(unique_num=request.session.get('unique_num'))
是否可以对这些查询进行预筛选?例如,如果用户登录,我应该能够

data = Model.objects.filter()
而且它应该只显示相关数据。

因为您不能为此编写一个,因为管理器是在类初始化期间加载的,并且对当前请求一无所知,所以最好的选择是在您的模型上编写一个
@classmethod


类模型(models.Model):
...
@类方法
def unique(cls,unique_num):
返回cls.objects.filter(unique\u num=unique\u num)
并在视图层中这样使用它:

qs = Model.unique(request.session.get("unique_num")).filter(...)

如果您可以为模型编写classmethod,那么您也可以为管理器编写方法,两者都不受请求的影响,但可以像上面那样接受方法中的任意参数。使其成为queryset/manager方法的好处是,它可以与其他方法链接并遵循模式。这是一种解决方案。我想,让过滤器工作的唯一方法是在数据库中实现RLS,并让中间件为该会话设置它们的RLS。