Django: Получение информации о вошедшем пользователе из базы данных и отображение ее в html
Я создал форму, которая позволяет мне сохранять информацию о пользователе моего сайта в базе данных. Сейчас я хочу создать страницу, на которой сохраненная информация будет отображаться и для моего пользователя. Конечно, я хочу, чтобы пользователь мог видеть только свою собственную информацию. Это то, что я придумал до сих пор, это не работает и, к сожалению, я не получаю никаких ошибок, просто пустая html страница, кроме заголовка. Как я могу решить эту проблему? Спасибо всем!
model.py
class Info(models.Model):
first_name = models.CharField(max_length=120)
last_name = models.CharField(max_length=120)
phone = models.CharField(max_length=10)
views.py
def show(request):
info = Info.objects.all().filter(first_name=request.user)
return render(request, 'profile/show.html', {'info': info})
info.html
<h1> Profile </h1>
</br></br>
{% if user.is_authenticated %}
{% for info in info %}
<li>First Name: {{ info.first_name }}</li>
<li>Last Name: {{ info.last_name }}</li>
<li>Phone Number: {{ info.phone }}</li>
{% endfor %}
{% endif %}
request.user
является User
. Поэтому, когда вы передаете его в first_name
, не кажется правильным
Вы можете сделать следующее:
def show(request):
user_first_name = request.user.first_name
info = Info.objects.all().filter(first_name=user_first_name)
return render(request, 'profile/show.html', {'info': info})
Применение метода фильтрации к набору запросов в Django возвращает список, а не отдельный объект.
Вы можете решить свою проблему следующим образом :
def show(request):
# You can use id to get a single user like bellow
info_id = Info.objects.get(user_id=request.user.id)
# Or use the `first` method of queryset to retrieve the first element in the list
info_name = Info.objects.all().filter(first_name=request.user.first_name).first()
return render(request, 'profile/show.html', {'info': info})