ali*_*s51 1 django django-models django-managers
我有一个模型管理器get_queryset:
class BookManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user
Run Code Online (Sandbox Code Playgroud)
这导致错误:
AttributeError: 'BookManager' 对象没有属性 'request`
我知道经理是“不知道请求的”。我将如何在您的经理/查询集中创建一个为 request.user 提供参数的方法?
简短回答:请求对象仅在视图中可用,因此您不能假设它在模型管理器中可用。
将它从您的视图传递给您的经理中接受它的方法:
class BookManager(models.Manager):
def by_author(self, user):
return self.get_queryset().filter(author=user)
Run Code Online (Sandbox Code Playgroud)
那么在你看来你可以做到Book.objects.by_author(request.user)。您需要首先确保这request.user是一个登录用户,否则您会得到一个例外。
注意:在这种特殊情况下,我不会遇到定义的麻烦,by_author因为它几乎不会使您的代码更具可读性。但是,如果您经常需要更复杂的查询,那么在您的经理中为它们分配一个方法来创建 DRY 代码可能是有意义的。
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |