我想获取用户发送的所有帖子。例如用户:admin,它将显示管理员的帖子。我写了一些代码,但可能是我犯了一个错误,但出现了一个错误。 我得到的错误:
AttributeError at /index_page/
'WSGIRequest' object has no attribute 'models'
这是我的代码:
views.py
def index_page(request):
logged_in_user = request.models.author
logged_in_user_posts = Post.objects.filter(author=user)
return render(request, 'blog/post_list.html', {'posts': logged_in_user_posts})
models.py
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = RichTextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
post_list.html
<div>
{% for post in posts %}
Username: {{ post.author.username }}
Post: {{ post.text }}
<br>
{% endfor %}
我的错误在哪里?
答案 0 :(得分:4)
该错误已提示该行:
logged_in_user = request.models.author
request
对象具有 no models
属性。它具有一个.user
属性,用于指定已登录的用户,因此您可以使用:
logged_in_user = request.user
还有另一个错误:您使用Post.objects.filter(user=user)
,但是也没有user
变量,而是有logged_in_user
变量。因此,您可以使用以下方法修复视图:
def index_page(request):
logged_in_user_posts = Post.objects.filter(author=request.user)
return render(request, 'blog/post_list.html', {'posts': logged_in_user_posts})
其他笔记:
login_required
decorator [Django-doc]装饰功能很有意义;和User
模型,因此使用standard way to refer to the user model [Django-doc]可能会有所帮助。如果您以后改变主意并实现另一个用户模型,则创建的迁移将自动让关系引用新模型。上面的两个注释不是严格才能使其起作用。但这是我在开发Django应用程序时的良好做法(尽管这些当然可能有点“基于观点”)。
答案 1 :(得分:1)
问题出在您的视图中,请求对象不包含您的模型。该视图应如下所示,
def index_page(request):
logged_in_user = request.user
logged_in_user_posts = Post.objects.filter(author=logged_in_user)
return render(request, 'blog/post_list.html', {'posts': logged_in_user_posts})
答案 2 :(得分:0)
我的回答有点晚了,但以后可能会对某人有所帮助。您可以使用基于类的视图。你的情况
views.py:
class UserPostListView(ListView):
model = Post
template_name = 'app_name/template_name.html'
context_object_name = 'posts'
def get_queryset(self):
user = get_object_or_404(User,username=self.kwargs.get('username'))
return Post.objects.filter(author=user)
并在您的 urls.py 中:
path('user/<str:username>', views.UserPostListView.as_view(), name='user-posts'),
然后在您的模板中:
{% block content%}
<h1> My files </h1>
{% for post in posts %}
{% endfor %}
{% endblock %}