簡體   English   中英

如何在個人資料頁面django上顯示擴展的用戶數據

[英]how can i display extended user data on profile page django

所以我正在按照本教程擴展django用戶模型

經過一些試驗和錯誤,我完成了它,但我似乎無法找到一種方法來顯示配置文件上的擴展數據

profile.html

    <h2> {{user.first_name}} </h2>
    <h2>  {{user.last_name}} </h2>
    <h2>  {{user.email} </h2>
    <h2>  {{user.website} </h2>
    <h2>  {{user.bio} </h2>
    <h2>  {{user.phone} </h2>
    <h2>  {{user.city} </h2>
    <h2>  {{user.country} </h2>


</div>

view.py

@login_required() # only logged in users should access this
def edit_user(request, pk):
    # querying the User object with pk from url
    user = User.objects.get(pk=pk)

    # prepopulate UserProfileForm with retrieved user values from above.
    user_form = UserForm(instance=user)

    # The sorcery begins from here, see explanation below
    ProfileInlineFormset = inlineformset_factory(User, UserProfile, fields=('website', 'bio', 'phone', 'city', 'country', 'organization'))
    formset = ProfileInlineFormset(instance=user)

    if request.user.is_authenticated() and request.user.id == user.id:
        if request.method == "POST":
            user_form = UserForm(request.POST, request.FILES, instance=user)
            formset = ProfileInlineFormset(request.POST, request.FILES, instance=user)

            if user_form.is_valid():
                created_user = user_form.save(commit=False)
                formset = ProfileInlineFormset(request.POST, request.FILES, instance=created_user)

                if formset.is_valid():
                    created_user.save()
                    formset.save()
                    return HttpResponseRedirect('/accounts/profile/')

        return render(request, "account/account_update.html", {
            "noodle": pk,
            "noodle_form": user_form,
            "formset": formset,
        })
    else:

        raise PermissionDenied

網址

url(r'^admin/', admin.site.urls),
    url(r'^$', main_views.home, name='home'),
    url(r'^accounts/profile/$', main_views.uprofile, name='uprofile'),
    url(r'^accounts/update/(?P<pk>\d+)/', User_Profile_views.edit_user, name='edit_user'),
    url(r'^accounts/', include('allauth.urls')),

楷模

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='user')
    website = models.URLField(default='', blank=True)
    bio = models.TextField(default='', blank=True)
    phone = models.CharField(max_length=20, blank=True, default='')
    city = models.CharField(max_length=100, default='', blank=True)
    country = models.CharField(max_length=100, default='', blank=True)
    organization = models.CharField(max_length=100, default='', blank=True)




def create_profile(sender, **kwargs):
    user = kwargs["instance"]
    if kwargs["created"]:
        user_profile = UserProfile(user=user)
        user_profile.save()
post_save.connect(create_profile, sender=User)

一切正常,但我找不到顯示在UserProfile模型中創建的擴展數據的方法

看起來您缺少擴展數據模板變量中的第二個'}'。

嘗試:

<h2> {{user.first_name}} </h2>
<h2>  {{user.last_name}} </h2>
<h2>  {{user.email}} </h2>
<h2>  {{user.website}} </h2>
<h2>  {{user.bio}} </h2>
<h2>  {{user.phone}} </h2>
<h2>  {{user.city}} </h2>
<h2>  {{user.country}} </h2>

你必須跨越這種關系,如下:

    <h2>  {{user.user.bio}} </h2>
    <h2>  {{user.user.phone}} </h2>
    <h2>  {{user.user.city}} </h2>
    <h2>  {{user.user.country}} </h2>

請注意,如果您沒有related_name='user' ,它將是以下內容:

        <h2>  {{user.userprofile.bio}} </h2>
        <h2>  {{user.userprofile.phone}} </h2>
        <h2>  {{user.userprofile.city}} </h2>
        <h2>  {{user.userprofile.country}} </h2>

暫無
暫無

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

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