如何在用户个人资料页面中将用户发布的博客显示为 Django 3 中的我的帖子列表部分?

Posted

技术标签:

【中文标题】如何在用户个人资料页面中将用户发布的博客显示为 Django 3 中的我的帖子列表部分?【英文标题】:How to show user posted blog in user profile page as a my post list section in Django 3? 【发布时间】:2020-12-25 06:33:20 【问题描述】:

我是一个新的 Django 学习者。我创建了一个包含两个应用程序博客和用户的博客网站。在用户应用程序中,我创建了一个用户个人资料页面,其中包含两部分用户基本信息和我的帖子列表。当用户登录并访问他/她的个人资料页面时,我的帖子列表部分仅显示该用户发布的帖子,否则显示您尚未发布任何帖子。一切正常,但我的帖子列表部分显示了博客中的所有帖子。我只想显示这个用户的帖子,而不是其他用户的帖子。我认为视图部分中的查询集需要修改,但我不明白会是什么。这是我的代码-

#Blog 应用:帖子模型

   class Post(models.Model):
          title = models.CharField(max_length=200, unique=True)
          slug = models.SlugField(max_length=200, unique=True)
          author = models.ForeignKey(User, on_delete= models.CASCADE, related_name='blog_posts')
          updated_on = models.DateTimeField(auto_now= True)
          content = models.TextField()
          created_on = models.DateTimeField(auto_now_add=True)
          
          class Meta:
              ordering = ['-created_on']

         def __str__(self):
              return self.title

#User 应用:配置文件模型

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    pic = models.ImageField(default='images/default.jpg', upload_to='images')
    about = models.TextField(blank=True)

#User App:views.py

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView, ListView
from blog.models import Post

class UserProfileView(LoginRequiredMixin, ListView):
     queryset = Post.objects.all()
     template_name = "profile.html"

profile.html 页面中的#My Post Lists 部分

<div class="user-post-list mt-4">
                    <h4>My Post Lists</h4>
                    <div class="table-responsive mt-4 mb-5">
                        <table class="table table-hover">
                            <thead>
                                <tr class="text-left">
                                    <th>TITLE</th>
                                    <th>CREATED ON</th>
                                    <th>UPDATED ON</th>
                                    <th>EDIT</th>
                                    <th>DELETE</th>
                                </tr>
                            </thead>
                            % for post in post_list %
                            <tbody>
                                <tr>
                                    <td> post.slug  </td>
                                    <td> post.created_on </td>
                                    <td> post.updated_on </td>
                                    <td><a class="btn btn-info" href="#" role="button">Edit</a></td>
                                    <td><a class="btn btn-danger" href="#" role="button">Delete</a></td>
                                </tr>
                            </tbody>
                            % endfor%
                        </table>
                    </div>
                </div>

谢谢!

【问题讨论】:

【参考方案1】:

是的,我解决了。只需要定义查询集。

class UserProfileView(LoginRequiredMixin, ListView):
 #queryset = Post.objects.all()
 template_name = "profile.html"

 def get_queryset(self):
    user = self.request.user
    return Post.objects.filter(author=user)

【讨论】:

【参考方案2】:

您必须通过self.kwargs['user_id'] 处理从url 到您的视图的用户ID,并通过Post.objects.filter(author=self.kwargs['user_id']) 过滤他的帖子。

【讨论】:

以上是关于如何在用户个人资料页面中将用户发布的博客显示为 Django 3 中的我的帖子列表部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中将用户数据保存在云Firestore中

django——个人博客之分页/筛选功能

如何使用 javascript/node js 从数据库中将图片动态加载到网页上

目的用户反馈博客

个人技术博客——Angular路由

如何在页面上显示来自 mongodb 数据库的用户数据,编辑数据并再次保存