ListView
для отображения нескольких объектов, поэтому нет смысла вызывать get_object()
(для представлений для одного объекта, например DetailView
).
Обычный подход для представлений списка - переопределить get_queryset
и отфильтровать набор запросов, чтобы показать только объекты этого пользователя.
class ContactListView(LoginRequiredMixin, ListView):
model = ClientContact
template_name = 'site/contacts.html'
context_object_name = 'contacts'
ordering = ['created_at', '-updated_at']
def get_queryset(self):
return super(ContactListView, self).get_queryset().filter(author=self.request.user)
У вас уже есть LoginRequiredMixin
, который будет обрабатывать случай, когда пользователь не вошел в систему.
Если вы хотите отфильтровать набор запросов в нескольких представлениях списка, вы можете написать миксин, например:
class AuthorMixin(object):
def get_queryset(self):
return super(AuthorMixin, self).get_queryset().filter(author=self.request.user)
Тогда используйте его в своем представлении как:
class ContactListView(LoginRequiredMixin, AuthorMixin, ListView):
...
Обратите внимание, что вышеприведенное не проверено, для него требуется LoginRequiredMixin
(поскольку оно не обрабатывает случай анонимного пользователя), и оно будет работать, только если внешний ключ пользователя имеет имя author
. Вы можете улучшить миксин, но можете повторить метод get_queryset
.