在我的应用程序中,用户可以链接个人资料。在站点所有页面上可见的侧边栏中,我想显示用户链接到的配置文件的用户名。到目前为止,我已经创建了一个 m2m 字段来链接配置文件,当用户登录时,我将此信息存储在一个会话中,以便它可以与其他会话信息捆绑在一起,并且不会创建另一个必须显式传递给的变量每个模板。但是,在访问链接配置文件列表时,我只能访问配置文件的 ID,而不能访问有关它们的任何其他信息。
模型
class Profile(models.Model):
username = models.CharField(max_length=25)
link = models.ManyToManyField('self', null=True, blank=True, related_name='link_profiles')
看法
def link_profiles(request, pid):
#get both profiles
my_p = Profile.objects.get(id=request.session['profile']['id'])
their_p = Profile.objects.get(id=pid)
#add profiles to eachothers links
my_p.link.add(their_p)
their_p.link.add(my_p)
#save profiles
my_p.save()
their_p.save()
#reset my session var to include the new link
#this is that same bit of code that sets the session var when the user logs in
request.session['profile'] = model_to_dict(my_p)
return redirect('/profiles/' + pid)
模板(使用 pyjade)
- for profile in session.profile.link
div
a(href="/profiles/{{ profile }}") profile {{ profile }}
这将输出类似的东西<a href='/profiles/5'>profile 5</a>
,但是使用profile.id
andprofile.username
只是在<a href='/profiles/'>profile</a>
. 是否可以通过这种方式访问此信息而无需创建另一个会话变量(例如request.session['links']
)?