Django自定义管理器请求对象/当前用户

6
我通过创建一个继承自models.Manager的类来制作了一个自定义管理器。该管理器只是更改了默认的model.objects查询以添加一些过滤器。现在,我想根据已登录的用户添加一个过滤器。我不想搜索代码并更改添加的参数,有没有办法可以获取请求对象/当前用户而无需将其传递给方法?
我希望这不是一个愚蠢的问题,但我可能只是有些困惑...
以下是Manager的基本设置:
class pubManager(models.Manager):

    def get_queryset(self):        
        return pubEnt.objects.filter(state='new')

    def on_site(self):
        return pubEnt.objects.filter(state='old', val=0)

2
类似问题:https://dev59.com/U3I-5IYBdhLWcg3wHUnP - Cloud Artisans
2个回答

11

在 Django 中,没有办法不传递请求对象就能够访问当前的 request。如果您不能在没有它的情况下正常工作,那么您应该重新考虑设计!管理器方法不应该要求访问 request,因为它也可以从没有 request 对象的地方进行访问(例如,从 Python shell 调用该方法)。如果您需要访问当前登录的用户,请将 user 对象(从 request.user)传递给方法,而不是整个 request



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接