我有一个模型管理器,带有get_queryset
:
class BookManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user
这将导致错误:
属性错误:“BookManager”对象没有属性“request”
我知道管理者是“不知道请求”的。我如何在你的manager/queryset中创建一个方法,它接受request.user的参数?
2条答案
按热度按时间d7v8vwbk1#
简短回答:request对象只在视图中可用,所以不能假设它在模型管理器中可用。
将它从视图传递到管理器中接受它的方法:
在你看来,你可以做
Book.objects.by_author(request.user)
。你需要首先确保request.user
是一个登录用户,否则你会得到一个异常。注意:在这个特殊的例子中,我不会去定义
by_author
,因为它几乎不会使您的代码更具可读性。但是如果您经常需要更复杂的查询,那么在管理器中为它们分配一个方法来创建DRY代码可能是有意义的。xj3cbfub2#
如果用户是当前用户,则可以使用线程。您可以在身份验证类中设置它并检索它