Django: Форма обновления профиля пользователя показывает данные только одного пользователя
Я создаю сайт электронной коммерции на Django, и у меня возникли проблемы с обновлением профилей пользователей. Я хочу отображать список пользователей и предоставлять возможность просматривать и обновлять профиль каждого из них. Однако в настоящее время я могу просматривать и обновлять профиль только вошедшего в систему пользователя.
Вот моя текущая реализация:
views.py:
def user_list(request):
users = CustomUser.objects.all()
return render(request, 'useradmin/user_list.html', {'users': users})
@login_required
def user_profile_update(request):
try:
profile = Profile.objects.get(user_name=request.user)
except Profile.DoesNotExist:
return render(request, 'useradmin/error.html', {'message': 'Profile does not exist.'})
if request.method == "POST":
image = request.FILES.get("image")
full_name = request.POST.get("full_name")
phone = request.POST.get("phone")
Address = request.POST.get("Address")
diamond_user = request.POST.get("diamond_user")
golden_user = request.POST.get("golden_user")
if image:
profile.image = image
profile.full_name = full_name
profile.phone = phone
profile.Address = Address
profile.diamond_user = diamond_user == 'on' # Checkbox values need special handling
profile.golden_user = golden_user == 'on'
profile.save()
messages.success(request, "Profile updated successfully")
return redirect("useradmin:user_profile_update")
context = {
"profile": profile
}
return render(request, 'useradmin/userprofile.html', context)
urls.py:
path('user_profile_update/', views.user_profile_update, name='user_profile_update'),
path('user_list/', views.user_list, name='user_list'),
user_list.html:
{% extends 'useradmin/base.html' %}
{% block content %}
<h1>User List</h1>
<ul>
{% for user in users %}
<li>
{{ user.email }} ({{ user.first_name }} {{ user.last_name }})
<a href="{% url 'useradmin:user_profile_update' %}">View/Update</a>
</li>
{% empty %}
<li>No users found.</li>
{% endfor %}
</ul>
{% endblock %}
userprofile.html
:
Когда я перехожу по URL-адресу user_profile_update
, я могу видеть и обновлять профиль только вошедшего в систему пользователя. Я хочу отобразить список пользователей и позволить обновлять их профили по отдельности.
Что я пробовал:
1.Обновил представление user_profile_update
, чтобы оно принимало user_id
.
2.Изменил шаблоны URL для передачи user_id
.
3.Обновлен шаблон списка пользователей со ссылками на страницу обновления профиля для каждого пользователя.
Ожидаемый результат: Когда я нажимаю кнопку "Просмотр" на странице списка пользователей, я должен быть направлен на форму обновления для этого конкретного пользователя.
Фактический результат: Только форма профиля вошедшего пользователя отображается для обновления.
Дополнительная информация: Версия Django: 3.x Версия Python: 3.x Любые другие необходимые конфигурации или настройки
Что я упускаю или делаю неправильно? Любая помощь будет оценена по достоинству!
Проблема в том, что вы читаете логин пользователя в user_profile_update
profile = Profile.objects.get(user_name=request.user)
Для решения проблемы необходимо отправить id пользователя со страницы user_list и прочитать его в user_profile_update. Измените ваш код следующим образом.
в файле views.py:
def user_profile_update(request, pk):
try:
profile = Profile.objects.get(user_id=pk)
в urls.py:
path('user_profile_update/<int:pk>/', views.user_profile_update, name='user_profile_update'),
в файле user_list.html:
{% extends 'useradmin/base.html' %}
{% block content %}
<h1>User List</h1>
<ul>
{% for user in users %}
<li>
{{ user.email }} ({{ user.first_name }} {{ user.last_name }})
<a href="{% url 'useradmin:user_profile_update' user.id %}">View/Update</a>
</li>
{% empty %}
<li>No users found.</li>
{% endfor %}
</ul>
{% endblock %}