Страница профиля для всех пользователей блогов 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')
Вернуться на верх