Страница профиля для всех пользователей блогов Django
Всем привет. Я создаю сайт блогов, и у каждого пользователя есть профиль, в котором должен быть список написанных им блогов. Но мне трудно сделать ссылку на отдельных пользователей.
Мои взгляды
class ShowProfilePageView(LoginRequiredMixin, DetailView):
model = UserProfile
template_name= 'registration/user_profile.html'
def get_context_data(self, *args, **kwargs):
context = super(ShowProfilePageView, self).get_context_data(*args, **kwargs)
page_user = get_object_or_404(UserProfile, id=self.kwargs['pk'])
user = self.request.user
user_posts = Post.objects.filter(author= user).order_by('-post_date')
context['page_user'] = page_user
context['user_posts'] = user_posts
return context
Примечание: Пользователь, определенный в представлении выше, является self.request.user
и это заставляет все профили пользователей перечислять блоги текущего вошедшего пользователя вместо того, чтобы основываться на конкретных пользователях.
Модели
Модель пост/блог
class Post(models.Model):
title = models.CharField(max_length=225)
header_image = models.ImageField(blank= True, null=True, upload_to='images/header_image')
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = RichTextField(blank=True, null=True)
post_date = models.DateField(auto_now_add = True)
category = models.CharField(max_length=225)
snippet = models.CharField(max_length=70)
UserProfile models
Модели профиля пользователя
class UserProfile(models.Model):
user = models.OneToOneField(User, null=True, on_delete = models.CASCADE)
bio = models.TextField(max_length=160)
profile_pic = models.ImageField(blank= True, null=True, upload_to='images/profile_pics')
website_url = models.CharField(max_length=250, null = True, blank = True)
twitter_url = models.CharField(max_length=250, null = True, blank = True)
github_url = models.CharField(max_length=250, null = True, blank = True)
linkedin_url = models.CharField(max_length=250, null = True, blank = True)
dribble_url = models.CharField(max_length=250, null = True, blank = True)
figma_url = models.CharField(max_length=250, null = True, blank = True)
codepen_url = models.CharField(max_length=250, null = True, blank = True)
facebook_url = models.CharField(max_length=250, null = True, blank = True)
instagram_url = models.CharField(max_length=250, null = True, blank = True)
Urls
Урл страницы профиля
path('<int:pk>/profile/', ShowProfilePageView.as_view(), name='show_profile_page'),
Шаблон
% for post in user_posts %}
<div class="col-md-6">
<div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="col p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-success"><a href="{% url 'category' post.category %}">{{ post.category}}</a></strong>
<h3 class="mb-0"><a href="{% url 'blog_detail' post.pk %}">{{ post.title }}</a></h3>
<div class="mb-1 text-muted">{{ post.post_date}}</div>
<p style="margin-top: 12px;" class="mb-auto">{{post.snippet}}</p>
</div>
{% if post.header_image %}
<img class="rounded float-right" style="width: 200px;" src="{{ post.header_image.url }}" alt="blog-header-image">
{% endif %}
</div>
</div>
{% endfor %}
Итак, любая помощь в итерации блогов для определенного пользователя, а не self.request.user.
У вас есть доступ к пользователю из профиля пользователя, поэтому вы можете просто использовать его, чтобы получить все сообщения из профиля.
В этом случае вы можете использовать page_user.user
в качестве автора:
page_user = get_object_or_404(UserProfile, id=self.kwargs['pk'])
user_posts = Post.objects.filter(author=page_user.user).order_by('-post_date')