如何在Django中使用ListView获取另一个用户的对象列表?

2024-10-02 14:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,我正在创建一个简单的博客web应用程序。我想使用get\u queryset方法获取另一个用户的博客帖子(不是经过身份验证的用户)。我尝试了下面的脚本,但它在模板上显示了一个空列表。我可以使用get_queryset显示所有博客帖子,但我主要关心的是显示特定用户的所有博客帖子(不是经过身份验证的用户)

View.py

class OtherUserProfileView(LoginRequiredMixin, ListView):

model = Post
template_name = "core/otheruser.html"

def get_queryset(self):
    queryset = super(OtherUserProfileView, self).get_queryset()
    queryset = queryset.filter(pk=self.user.id)
    return queryset

Model.py

class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=250)
content = models.TextField()
created = models.DateTimeField(auto_now_add=True)
publish = models.BooleanField(blank=True, default=False)

def __str__(self):
    return self.title

Tags: 用户pyself身份验证getmodelreturnmodels
1条回答
网友
1楼 · 发布于 2024-10-02 14:26:05

您可以在url模式中传递要筛选查询集的用户id

urlpatterns = [
    path('profile/<int:user_id>/', views.OtherUserProfileView.as_view(), name='profile'),
]

在您的视图中,您可以通过self.kwargs['user_id']从路径访问user_id,并使用它来过滤查询集

class OtherUserProfileView(LoginRequiredMixin, ListView):

    model = Post
    template_name = "core/otheruser.html"

    def get_queryset(self):
        queryset = super().get_queryset()
        queryset = queryset.filter(user_id=self.kwargs['user_id'])
        return queryset

相关问题 更多 >