Accessing UserProfile data from foreign key related Post

I am currently working on a little django app, the app is like a social media app.

User can post, like and comment.

I recently created the User Profiles. Which I can now see the user for that user profile in my view, but I cant seem to dig into the Posts that may be related to the UserProfile.

what I am trying to do is in my view of HTML, I want to be able to get the post from the userprofile and the comment, and likes.

But I have tried everything and nothing works.

Currently in my HTML view I have rendered {{ profile.user }} and it displays the users name, but If I try profile.user.post or profile.user.comments I get nothing.

Here is some code to show where I am at. Any help would be much appreciated.

Profile View.

def profile(request):
profile = get_object_or_404(UserProfile, user=request.user)

template = 'profiles/profile.html'
context = {
    'profile': profile,
    # 'posts': posts
}

return render(request, template, context)

Profile Model

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class UserProfile(models.Model):
    """
    A user profile model to link posts and likes
    """

    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")

    def __str__(self):
        return self.user.username

Post Model

from django.db import models
from django.contrib.auth.models import User
from cloudinary.models import CloudinaryField
from profiles.models import UserProfile


class Post(models.Model):
    user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, blank=True, related_name='user_posts')
    title = models.CharField(max_length=220, unique=True)
    location = models.CharField(max_length=220)
    rating = models.DecimalField(
        max_digits=6, decimal_places=2)
    #slug = models.SlugField(max_length=220, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="activity_post")
    updated_on = models.DateTimeField(auto_now=True)
    description = models.TextField()
    featured_image = CloudinaryField('image', blank=False)
    created_on = models.DateTimeField(auto_now_add=True)
    likes = models.ManyToManyField(User, related_name='activity_likes', blank=True)
    like_count = models.BigIntegerField(default='0')

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

    def number_of_likes(self):
        return self.likes.count()

    def liked_by_user(self):
        return self.likes.values_list('id', flat=True)


class Comment(models.Model):

    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    name = models.CharField(max_length=80)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ['created_on']

    def __str__(self):
        return f"Comment {self.body} by {self.name}"

    enter code here

My Signal to create / save the profile, also have it registered in apps.py

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import UserProfile

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()
Back to Top