Django-从用户名获取用户ID

时间:2020-11-01 14:31:09

标签: django

我想在个人资料页面上获取用户帖子。 我当前的代码是:

# views.py

def show_blog(request, username):
# If username exists
if User.objects.filter(username = username).exists():
    # Get user data and rendert the page
    user_data = {'user': User.objects.get(username = username)}
    user_posts = {'posts': Post.objects.filter(author = user_data.id)}
    return render(request, "blogs/show_blog.html", user_data)

return HttpResponse(404)


# show_blog.html - later, I'll make it show user posts
<h1>@{{ user }}</h1>
<p>{{ user.first_name }} {{ user.last_name }}</p>

现在,问题出在这个错误上:

AttributeError at /blogs/testuser/
'dict' object has no attribute 'id'

当我去:

/blogs/testuser

2 个答案:

答案 0 :(得分:0)

您不能使用user_data.id,因为user_data是包含'user'键而不是User对象本身的字典。

您可以使用user代替:

from django.shortcuts import get_object_or_404

def show_blog(request, username):
    user = get_object_or_404(User, username=username)
    context = {
        'user': user,
        'posts': Post.objects.filter(author=user)
    }
    return render(request, 'blogs/show_blog.html', context)

您通过迭代来呈现帖子:

{% for post in posts %}
    {{ post }}
{% endfor %}

注意:通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,由于用户自己更改了网址,因此get_object_or_404(…)将导致返回 HTTP 404 Not Found 响应,而使用 .get(…)将导致 HTTP 500服务器错误

答案 1 :(得分:0)

您正在尝试使用字典作为查询集。字典项只是键值对。

user = User.objects.get(username = username)
posts =  Post.objects.filter(author = user.id)
context = {'user':user,'user_posts':posts}
return render(request, "blogs/show_blog.html", context)

现在您可以在模板中完成

<h1>{{user.username}}</h1>
<p>{{ user.first_name }} {{ user.last_name }}</p>
<p>{{ user_posts.title }}</p>
相关问题