Доступ к данным UserProfile по внешнему ключу Post

В настоящее время я работаю над небольшим приложением на django, приложение похоже на приложение для социальных сетей.

Пользователь может публиковать, ставить лайки и оставлять комментарии.

Я недавно создал профиль пользователя. Теперь я могу видеть пользователя для этого профиля в моем представлении, но я не могу найти сообщения, которые могут быть связаны с профилем пользователя.

Что я пытаюсь сделать, это в моем представлении HTML, я хочу иметь возможность получить сообщение из профиля пользователя и комментарий, и лайки.

Но я перепробовал все, и ничего не помогает.

В настоящее время в моем HTML представлении я отобразил {{ profile.user }} и он отображает имя пользователя, но если я попробую profile.user.post или profile.user.comments, я ничего не получу.

Здесь приведен код, чтобы показать, где я нахожусь. Любая помощь будет очень признательна.

Просмотр профиля.

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)

Профильная модель

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

Модель поста

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

Мой сигнал для создания/сохранения профиля, а также его регистрация в 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()
Вернуться на верх