#python #django #django-views #django-queryset #django-listview
#python #django #django-views #django-queryset #django-listview
Вопрос:
Я хочу показать все сообщения определенного пользователя на странице его профиля, но отображается только информация о его профиле, но не сообщения.
Мой первоначальный код просто пытался перебирать сообщения в шаблоне следующим образом:
{% for post in user.posts.all %}
{% endfor %}
Но это не сработало. Итак, я попробовал это дальше.
views.py
user = get_object_or_404(User, username=username)
post = Post.objects.filter(created_by=user.id)
context = {
'user': user,
'post': post
}
return render(request, 'users/profile.html', context)
profile.html
<div class="user-profile">
<img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
{{ user.username }}
{{ user.email }}
</div>
<div class="user-post-model">
{% for post in posts %}
<img class="rounded-circle post-img" src="{{ post.created_by.profile.image.url }}">
{{ post.title }}
{{ post.content|safe }}
{{post.tag}}
{{ post.created_by }}
{{ post.created_at|naturaltime}}
{% endfor %}
</div>
Это тоже не сработало
Я также пытался использовать ListView для публикации сообщений. Это сработало, но вместо отображения информации о профиле конкретного пользователя в нем отображалась информация о профиле зарегистрированного пользователя, но сообщения конкретного пользователя.
вот так:
def profile(request, username):
user = get_object_or_404(User, username=username)
context = {
'user': user
}
return render(request, 'users/profile.html', context)
class UserPostListView(ListView):
model = Post
template_name = 'users/profile.html'
context_object_name = 'posts'
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Post.objects.filter(created_by=user).order_by('-created_at')
Это модель post
class Post(models.Model):
title = models.CharField(max_length=255)
content = RichTextField(blank=True, null=True, max_length=30000)
created_at = models.DateTimeField(default=timezone.now)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
tag = models.CharField(max_length=255, default='uncategorised')
class Meta:
ordering = ('-created_at',)
def __str__(self):
return self.title ' | ' str(self.created_by)
def get_absolute_url(self):
return reverse("post-detail", kwargs={"pk": self.pk})
Что не так?
Комментарии:
1.
{% for post in posts %}
в контексте, который вы передалиpost
, вы все же перебираетеposts
2. Вы пробовали просто использовать
request.user
?3. Даже если я введу
{% for post in post %}
то, что пробовал раньше, оно не будет проходить через сообщения.4.
request.user
также ничего не возвращает @M-Chen-35. @AbdulAzizBarkat Мне нужны сообщения определенного пользователя, а не только для вошедшего в систему пользователя. Очень похоже на просмотр чьего-либо профиля / страницы учетной записи для Youtube instagram. Он должен возвращать сообщения только для учетной записи.
request.user
предоставляйте мне только информацию о вошедшем в систему пользователе, когда я нажимаю на чью-то учетную запись.
Ответ №1:
Чтобы перебрать связанные Post
объекты User
, используйте _set
(Django Docs) .
Итак, в вашем случае user.post_set
:
{% for post in user.post_set.all %}
{{ post.title }}
{% endfor %}
Комментарии:
1. @ImmortalNoob, рад помочь))) и успехов в кодировании.