Am trying to get individual posts by a particular user. If i click on a particular users i want to get all the posts he has posted Django

Viewed 75

Am actually new to programming, so i am just getting a blank page, no errors.

This is my model

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile', 
    blank=True, null=True)
    bio = models.TextField(max_length=500, null=True)
    location = models.CharField(max_length=30, null=True)
  
    def __str__(self):
      return self.user.username
    
    def get_absolute_url(self):
      return reverse('outcome:userprofile-detail', kwargs={'pk': self.pk})
    
class Post(models.Model):
    text = models.TextField(max_length=255)
    profile = models.ForeignKey('Profile', null=True, on_delete = models.CASCADE, related_name='create')
    overview = models.CharField(max_length=255)
    
    def __str__(self):
      return self.text 

The view

class Userlist(LoginRequiredMixin, ListView):
    model = Profile
    template_name = 'outcome/user-list.html'
        

class UserDetail(LoginRequiredMixin, DetailView):
    model = Profile
    template_name = 'outcome/userprofile_detail.html'

The template

{% for i in post.profile_set.all %}
  **`trying to loop over the post`**

  {{i.text}}
{% endfor %}

I have tried this for a while now and i dont know whether its from template or view.

1 Answers

You can override get_context_data method like this :

class UserDetail(LoginRequiredMixin, DetailView):
    
    model = Profile
    template_name = 'outcome/userprofile_detail.html'
    
    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in a QuerySet of the user posts
        all_posts = Post.objects.all()
        user_posts = all_posts.filter(profile_id=self.request.user.profile.id)
        context['user_posts'] = user_posts
        return context

user_detail.html

{% for post in user_posts %}
    {{post.text}}
    {{post.overview}}
{% endfor %}
Related