如何只显示一个用户(已登录的用户)的配置文件?



我试图添加一个用户配置文件页面到我的博客(德语),但当我运行服务器并转到用户配置文件页面时,它显示了数据库中所有用户的配置文件。

我只想显示一个用户(登录的用户)的配置文件

这是我的views.py:

...
class UserProfile(LoginRequiredMixin, ListView):
model = Member
template_name = "app/profile.html"
context_object_name = "member_infos"

...

和我的profile.html模板:

...
{% for info in member_infos %}
<div class="row">
<div class="col-md-3">
<div class="card card-body">
<h3 style="text-align:center;">Profil</h3>
<hr />
{% if info.picture %}
<img class="profile-pic" src="{{ info.picture.url }}" />
{% else %}
<img class="profile-pic" src="{% static 'media/images/profile_pic/default_profile_pic.png' %}" />
{% endif %}
</div>
</div>
<br /><br />
<div class="col-md-9">
<div class="card card-body">
<p class="card-text"> <strong>Vorname(n): </strong> {{ info.first_name }} </p>
<hr />
<p class="card-text"> <strong>Nachname: </strong> {{ info.last_name }} </p>
<hr />
<p class="card-text"> <strong>Telefonnummer: </strong> {{ info.contact }} </p>
<hr />
<p class="card-text"> <strong>E-Mail-Adresse: </strong> {{ info.email }} </p>
</div>
<br /><br />
<a class="btn btn-warning ml-7" href="{% url 'edit-profile' %}"> Daten bearbeiten  &rarr;</a>
</div>
</div>
<br /><br />
{% endfor %}
...

如我所说,它显示了数据库中所有用户的配置文件。

如何修复?

我需要帮助!

编辑:我已经修复了那个错误/bug我只是在views.py中删除了我的配置文件类用

代替
@login_required
def userProfile(request):
return render(request, "app/profile.html")

由于User之间的OneToOne关系,,我能够访问该表中的数据,并且只显示当前登录的用户。

My Member class inmodels.py看起来像:

# Member's model
class Member(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='User from database')
first_name = models.CharField(max_length=255, null=True, blank=True, verbose_name='Vorname(n)')
last_name = models.CharField(max_length=255, null=True, blank=True, verbose_name='Nachname')
contact = models.CharField(max_length=255, null=True, blank=True, verbose_name='Telefonnummer')
email = models.EmailField(unique=True, null=True, blank=True, verbose_name='E-Mail-Addresse')
picture = models.ImageField(upload_to='media/images/profile_pic/%Y/%m/%d', blank=True, null=True, verbose_name='Profilbild', default='media/images/profile_pic/default_profile_pic.png')
class Meta:
verbose_name = 'Member'
verbose_name_plural = 'Members'
def get_absolute_url(self):
return reverse('members', args=[self.slug])
def __str__(self):
return str(self.user)

我的个人资料模板(profile.html):

{% extends 'app/base.html' %}
{% load static %}
{% block title %}
Profil • Deutsch
{% endblock %}

{% block extra_head %}
<link rel="shortcut icon" href="{% static 'media/site/favicon.ico' %}" type="image/x-icon" />
<style type="text/css" media="all">
.profile-pic{
max-width: 200px;
max-height: 200px;
margin: 0 auto;
border-radius: 50%;
}
.ml-7{
margin-left: 5rem !important;
}
</style>
{% endblock %}

{% block content %}
{% if request.user.is_authenticated %}
<div class="row">
<div class="col-md-3">
<div class="card card-body">
<h3 style="text-align:center;">Profil</h3>
<hr />
{% if user.member.picture %}
<img class="profile-pic" src="{{ user.member.picture.url }}" />
{% else %}
<img class="profile-pic" src="{% static 'media/images/profile_pic/default_profile_pic.png' %}" />
{% endif %}
</div>
</div>
<br /><br />
<div class="col-md-9">
<div class="card card-body">
<p class="card-text"> <strong>Benutzername: </strong> {{ user.username }} </p>
<hr />
<p class="card-text"> <strong>Vorname(n): </strong> {{ user.member.first_name }} </p>
<hr />
<p class="card-text"> <strong>Nachname: </strong> {{ user.member.last_name }} </p>
<hr />
<p class="card-text"> <strong>Telefonnummer: </strong> {{ user.member.contact }} </p>
<hr />
<p class="card-text"> <strong>E-Mail-Adresse: </strong> {{ user.member.email }} </p>
</div>
<br /><br />
<a class="btn btn-warning ml-7" href="{% url 'edit-profile' %}"> Daten bearbeiten  &rarr;</a>
</div>
</div>
<br /><br />
{% endif %} <!-- if user logged in -->
{% endblock content %}

谢谢你的帮助!我已经修好了。

你可以这样做:-

{% if request.user %}
{% for info in member_infos %}
{% if info.picture %}
<img class="profile-pic" src="{{ info.picture.url }}" />
{% else %}
<img class="profile-pic" src="{% static 
'media/images/profile_pic/default_profile_pic.png' %}" />
{% endif %}
</div>
</div>
<br /><br />
<div class="col-md-9">
<div class="card card-body">
<p class="card-text"> <strong>Vorname(n): </strong> {{ info.first_name }} </p>
<hr />
<p class="card-text"> <strong>Nachname: </strong> {{ info.last_name }} </p>
<hr />
<p class="card-text"> <strong>Telefonnummer: </strong> {{ info.contact }} </p>
<hr />
<p class="card-text"> <strong>E-Mail-Adresse: </strong> {{ info.email }} </p>
</div>
<br /><br />
<a class="btn btn-warning ml-7" href="{% url 'edit-profile' %}"> Daten bearbeiten  &rarr;</a>
</div>
</div>
<br /><br />
{% endfor %}
{% endif %}

template中添加{% if request.user %}将检查,如果当前用户是request.user则显示request.user的所有信息。然后在最后使用{% endif %}。这意味着你结束了if语句。

试试这个:

class UserProfile(LoginRequiredMixin, ListView):
model = Member
template_name = "app/profile.html"
context_object_name = "member_infos"
def get_queryset(self):
qs = super().get_queryset()
# asuming your email field is unique
return qs.filter(email=self.request.user.email)

尝试使用这个:-

views.py

def profile_view(request):
user = User.objects.filter(request.user)

最新更新