Django: Извлеките информацию о зарегистрированных пользователях из базы данных и покажите их в html

#python #django

Вопрос:

Я решил создать форму, которая позволит мне сохранять информацию о пользователях моего веб-сайта в базе данных. Прямо сейчас я хотел бы создать страницу, на которой сохраненная информация также будет показана моему пользователю. Конечно, я хочу, чтобы мой пользователь мог видеть только свою собственную информацию. Это то, что я придумал до сих пор, это не работает, и, к сожалению, я не получаю никаких ошибок, просто пустая 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 %}
 

Комментарии:

1. Проблема из-за request.user использования User модели Django по умолчанию

2. Как вы сохранили эту информацию об этом пользователе

Ответ №1:

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})
 

Ответ №2:

Метод фильтра, применяемый к набору запросов в 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})