Если вы хотите отобразить несколько сообщений, то лучше подойдет ListView
с model = Post
.
from django.views.generic import ListView
class ProfileDetail(List):
model = Post
template_name = 'users/myprofile.html'
context_object_name = 'posts'
paginate_by = 5
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Post.objects.filter(author = user).order_by('-date_posted')
В качестве альтернативы, если вы хотите использовать DetailView
, тогда у вас должно быть model = User
, потому что вы показываете сообщения для одного пользователя. Вы можете избежать ошибки «должен быть вызван с помощью объекта pk или slug», переопределив get_object
.
from django.views.generic import DetailView
class ProfileDetail(ListView):
model = User
template_name = 'users/myprofile.html'
def get_object(self):
return User.objects.get(username=self.kwargs['username'])
Затем в шаблоне вы можете перебирать сообщения пользователя с помощью чего-то вроде:
{% for post in user.post_set.all %}
{{ post }}
{% endfor %}
Обратите внимание, что при переключении на DetailView
вы теряете функции нумерации страниц ListView
.