I'm building a blog site and each user has a profile that should list their written blogs. But I'm having problems making a reference to individual users. How can I iterate blogs for a defined user, and not self.request.user?
My Views
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
Note: The user, defined in the view above is self.request.user and this makes all the user profiles list out the blogs of the current logged in user instead of been based on particular users.
Models
The Post/Blog model
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
The user profile 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
The Profile page url
path('<int:pk>/profile/', ShowProfilePageView.as_view(), name='show_profile_page'),
Template
% 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 %}