как отобразить данные профиля пользователя по id в django - PullRequest
1 голос
/ 03 августа 2020

пытался связать пользователя профиля с сообщением, которое они сделали в django что-то вроде post.author.profile

вот что я пробовал:

views.py

def user(request, id):
if request.method == 'POST':
    r_form = upload_resume(request.POST, request.FILES, instance=request.user.profile)
    if r_form.is_valid():
        r_form.save()
        messages.success(request, f'your resume has been uploaded')
        return redirect('user')
else:
    r_form = upload_resume(instance=request.user)

context = {
    'r_form': r_form
}
return render(request, 'users/profile.html', context)

models.py

class profile(models.Model):
    user = models.OneToOneField(User,on_delete = models.CASCADE, related_name='profile')
    bio = models.TextField(blank=True)

urls.py

 path('user/<int:id>/', views.user, name='user')

и, наконец, html страницы профиля

<div class="profile-card__name" style="color: #212f3c;">@{{user.get_username}}</div>
<div class="profile-card__txt"style="text-align: center;">last seen on {{user.last_login}}</div><br>
{%if user.first_name and user.last_name%}
<div class="text" style="font-size: 15px;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;position: relative; align-items: flex-start;padding-left: 20px;"><img class="user_icons" src="{{object.profile.profile_pic.url}}" style="border-radius: 100%;height: 20px;width: 25px;"><b style="padding-left: 10px;">{{user.first_name}} {{user.last_name}}</b></div>
{%endif%}
{%if object.profile.bio%}
<div class="profile-card__txt" style="position: relative;align-items: flex-start;padding-left: 20px;"><b>About me:</b> {{object.profile.bio}}</div>
{%endif%}
{%if object.profile.current_location%}
<div class="text" style="font-size: 15px;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;position: relative; align-items: flex-start;padding-left: 20px;"><img class="user_icons" src="{% static 'blog/location.svg'%}" style=" height: 25px;width: 25px;padding-right: 5px;"><b>{{object.profile.current_location}}</b></div>
{%endif%}

когда когда-либо от go до user/25/ он отображает информацию о текущем вошедшем в систему пользователю даже с идентификатором другого пользователя .. как мне это исправить .. Заранее спасибо :)

1 Ответ

2 голосов
/ 03 августа 2020

Ну, вы используете request.user.profile вместо profile с заданным id. Вы можете использовать get_object_or_404(…) [Django -doc] :

from django.shortcuts import get_object_or_404

def user(request, id):
    profileobj = <b>get_object_or_404(</b>profile, pk=id<b>)</b>
    if request.method == 'POST':
        r_form = upload_resume(request.POST, request.FILES, <b>instance=profileobj</b>)
        if r_form.is_valid():
            r_form.save()
            messages.success(request, f'your resume has been uploaded')
            return redirect('user', <b>id=id</b>)
    else:
        r_form = upload_resume(<b>instance=profileobj</b>)

    context = {
        'r_form': r_form,
        'object': <b>profileobj.profile</b>
    }
    return render(request, 'users/profile.html', context)

Примечание : модели в Django записываются в PerlCase , а не snake_case , поэтому вы можете захотеть переименовать модель из profile до Profile.

Примечание : Обычно Form или ModelForm заканчивается суффиксом …Form, чтобы избежать коллизий с названием модели и дать понять, что мы работа с формой . Поэтому было бы лучше использовать UploadResumeForm вместо upload_resume.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...