Как получить доступ к фотографии профиля автора поста в Django?

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

В моем шаблоне: (я думаю, что моя проблема в том, что у меня нет доступа к посту?)

<img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">

Мои пользователи\models.py:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self, *args, **kwargs):
        super(Profile, self).save(*args, **kwargs)
        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

В моем блоге/models.py:


class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

Я могу получить имя пользователя некоторого пользователя по {{ view.kwargs.username }}, как я могу сделать это с фотографиями профиля?

мой блог\views.py:


def home(request):
    context = {
        'posts': Post.objects.all(), # querying the database
    }
    return render(request, 'blog/home.html', context)

class PostDetailView(DetailView):
    model = Post


class UserPostListView(ListView):
    model = Post
    template_name = 'blog/user_posts.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'posts'
    paginate_by = 5

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-date_posted')

Используйте ForeignKey вместо OneToOneField. Добавьте related_name:

class Profile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="profile")
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')

в html:

<img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">

Вы также можете написать собственный метод.

e.g:

class Post(models.Model):
    ...
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    ...

    def get_owner_pp(self):
        return self.author.profile.image.url

в html:

<img class="rounded-circle article-img" src="{{ post.get_owner_pp }}">
Вернуться на верх