Краткий ответ: объект запроса доступен только в представлении, поэтому вы не можете предполагать, что он доступен в вашем менеджере моделей.
Передайте его из вашего представления методу в вашем менеджере, который его принимает:
class BookManager(models.Manager):
def by_author(self, user):
return self.get_queryset().filter(author=user)
Тогда, по вашему мнению, вы можете сделать Book.objects.by_author(request.user)
. Сначала вам нужно убедиться, что request.user
является зарегистрированным пользователем, в противном случае вы получите исключение.
Примечание: В этом конкретном случае я бы не стал go из-за проблем с определением by_author
, поскольку это вряд ли делает ваш код более читабельным. Но если есть более сложные запросы, которые вам часто нужны, то может иметь смысл назначить им метод в вашем менеджере для создания DRY кода.