如何在 Django 上的一个 ListView Class 中使用多个模型

How to use multiple models in one ListView Class on Django

我想创建 pege,它可以使用 Django 预览 auhors 个人资料和帖子。

我创建了 UserPostListView Class,然后我想按作者姓名搜索个人资料模型并获取个人资料。

我该怎么做?

All code here

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):
        super().save()

        img = Image.open(self.image.path)

        output_size = (300,300)
        img.thumbnail(output_size)
        img.save(self.image.path)

views.py(UserPostListView Class)

class UserPostListView(ListView):
    model = Post
    template_name = 'blog/user_posts.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')

    def get_context_data(self, **kwargs):
        context = super(UserPostListView, self).get_context_data(**kwargs)
        context['profiles'] = Profile.objects.all()
        return context

据我了解,您想要 post 中 post 的作者个人资料 queryset 是单个用户,因此您的 get_context_data 您可以获得每个 post 的作者。

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["profile"] = Profile.objects.filter(user__username=self.kwargs.get("username"))
        return context