显示所有用户而不是一个用户的数据的Django模板

时间:2019-01-27 15:08:43

标签: python html django

我正在尝试检索有关用户个人资料的信息以显示在页面上。问题是它从每个用户那里检索相关信息,而不仅仅是从登录的那个用户那里获取信息。

我尝试仅请求当时登录的用户,但是很遗憾,我无法使它正常工作。

HTML

    <div>
        <span class="bold">
            <p>Bio:</p>
        </span>
        <p>
            {{ profile.bio }}
        </p>
    </div>

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, default=None, null=True, on_delete=models.CASCADE)
    bio = models.CharField(max_length=2000)
    instrument = models.CharField(max_length=255, choices=instrument_list, blank=True)
    level = models.CharField(max_length=255, choices=level_list, blank=True)
    preferred_language = models.CharField(max_length=255, choices=language_list, blank=True)
    time_zone = models.CharField(max_length=255, choices=time_list, blank=True)

    def __str__(self):
        return self.profile

    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)

    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

class ProfileForm(ModelForm):
    class Meta:
        model = Profile
        exclude = ('user',)

views.py

@login_required
def profile_page_edit(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST)

        if form.is_valid():
            profile = form.save(commit=False)
            profile.user = request.user
            profile.save()
            return redirect('/student/profile-page')

        else:
            form = ProfileForm()

    form = ProfileForm()

    context = {'form': form }
    return render(request, 'student/profile_page_edit.html', context)

@login_required
def profile_page(request):
    form = ProfileForm
    profile = request.user.profile
    args = {'form' : form, 'profile' : profile}
    return render(request, 'student/profile_page.html', args)

我试图获取profile_page视图以仅显示一个用户(当前登录的用户)的相关模型信息。

1 个答案:

答案 0 :(得分:3)

您需要过滤查询集,从而获取正确的查询集:

from django.contrib.auth.decorators import login_required

@login_required
def profile_page(request):
    form = ProfileForm()
    profile = request.user.profile
    context = {'form' : form, 'profile' : profile}
    return render(request, 'student/profile_page.html', context)

在模板中,我们当然只渲染profile变量的简介:

 <!-- Bio -->
    <div>
        <span class="bold">
            <p>Bio:</p>
        </span>
        <p>
            {{ profile.bio }}
        </p>
    </div>

请注意,除非您为该用户创建Profile对象,否则没有Profile与该User相关的对象。