通过 User.objects.filter 访问个人资料页面的用户对象

Accessing User objects through User.objects.filter for a profile page

我如何查询 User 模型以获取用户信息,如:用户名、电子邮件、名字和姓氏到他的个人资料中。我想在他的个人资料页面中显示所有这些信息。

如您在 个人资料 视图中所见,我愿意访问用户电子邮件,但我如何查询数据库以在个人资料页面中获取所有这些信息?

def profile(request, pk):
    user_profile = User.objects.filter(email=request.user)


    context = {'user_profile':user_profile}
    return render(request, 'profile.html', context)

个人资料模板:

  <p>{{user.email}}</p>

如果您要查找 logged_in 用户详细信息,您已经将其作为请求对象的一部分。因此,您可以在模板中使用以下内容而无需在视图中进行查找:

<p>Username: {{request.user.username}}</p>
<p>Email: {{request.user.email}}</p>

如果您想使用传递给您的视图的 PK 值,以便访问者可以访问另一个用户的个人资料(例如,主键用于标识另一个用户帐户),您可以对其进行查找.正如 Sunderam Dubey 指出的那样,最好的方法是通过 get_object_or_404() 在您的视图中调用

views.py

from django.shortcuts import get_object_or_404

def profile(request, pk):
    user = get_object_or_404(User,id=pk)     
    context = {'user_context':user}
    return render(request, 'profile.html', context)
 

profile.html

<p>Email : {{user_context.email}}</p>
<p>Username : {{user_context.username}}</p>

注意变量对象名称末尾带有 _context。您不必遵循此命名约定,但重要的是我命名的东西 'user_context' 具有相同的名称。

如果您只想访问当前登录的用户信息,那么您不应使用 filter(),因为它会为您提供查询集并通过我们在模板中 运行 的循环使用。您应该使用 get_object_or_404[django-doc] 来显示单个对象的数据。如果什么也没找到,它会返回 404。

Views.py

from django.shortcuts import get_object_or_404

def profile(request, pk):
    single_user = get_object_or_404(User,pk=pk)


    context = {'single_user':single_user}
    return render(request, 'profile.html', context)

模板文件


{% if single_user %}
    <p>Email : {{single_user.email}}</p>

    <p>Username: {{single_user.username}}</p>
    <p>first name : {{single_user.first_name}}</p>
    <p>last name: {{single_user.last_name}}</p>
{% else %}
    <p>user is not coming</p>
{% endif %}

我通过在配置文件视图中执行此操作解决了我的问题:

def profile(request, pk):
    user_context = get_object_or_404(User,id=pk)     
    context = {'user_context':user_context}
    return render(request, 'profile.html', context)

我现在可以通过以下方式访问模板中的所有用户信息:

<div class="container">
    <div class="row justify-content-center">
        <p>Email: {{user.email}}</p>
        <br>
        <p>Username {{ user.username }}</p>
    </div>
</div>