簡體   English   中英

如何在 django 中按 id 顯示用戶配置文件數據

[英]how to display user profile data by id in django

試圖將個人資料的用戶鏈接到他們在 django 中發布的帖子,例如 post.author.profile

這是我嘗試過的:

視圖.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)

模型.py

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

網址.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/時,即使使用另一個用戶的 id,它也會呈現當前登錄用戶的信息。我該如何解決這個問題。提前謝謝:)

那么您使用request.user.profile ,而不是具有給定idprofile 您可以使用get_object_or_404(…) [Django-doc]

from django.shortcuts import get_object_or_404

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

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

注意: Django 中的模型是用PerlCase而不是snake_case編寫的,因此您可能希望將 model 從profile重命名為Profile


注意:通常FormModelForm…Form后綴結尾,以避免與 model 的名稱沖突,並明確我們正在使用form 因此,使用UploadResumeForm而不是upload_resume可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM