私のアプリでは、ユーザーはプロファイルをリンクできます。サイトのすべてのページに表示されるサイドバーに、ユーザーがリンクされているプロファイルのユーザー名を表示したいと考えています。これまでのところ、プロファイルをリンクするために 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
してprofile.username
に空白を入れるだけ<a href='/profiles/'>profile</a>
です。別のセッション変数を作成せずにこの方法でこの情報にアクセスすることは可能ですか (たとえばrequest.session['links']
)?