如何在用户个人资料页面中将用户发布的博客显示为 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中