我正在尝试检索有关用户个人资料的信息以显示在页面上。问题是它从每个用户那里检索相关信息,而不仅仅是从登录的那个用户那里获取信息。
我尝试仅请求当时登录的用户,但是很遗憾,我无法使它正常工作。
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视图以仅显示一个用户(当前登录的用户)的相关模型信息。
答案 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
相关的对象。