2016-12-28 8 views
1

私は、エンドユーザーの進行状況をタスクに保存するモデルを用意しています。djangoでは、ユーザーがログインしたときに、セッションの外部キーからユーザーの外部キーにオブジェクトを移動する方法

class TaskCompleted(models.Model): 
    session = models.ForeignKey('sessions.Session', on_delete=models.SET_NULL,blank=True, null=True) 
    user = models.ForeignKey(User, blank=True, null=True) 
    task = models.ForeignKey(Task, blank=True, null=True) 

エンドユーザーがログインしているか、ログインしていない可能性があります。彼らがログに記録されている場合、私はそれをユーザーに対して保存し、そうでなければセッションに対して保存します。

ユーザーがログインすると、認証されていない間に完了したタスクを見つけて、ユーザーの外部キーを更新してアカウントに関連付ける必要があります。

セッションが破棄されているため、セッションをNullに設定しています。

これを処理する方法に関する他の提案に興味がありますか?

+0

Javascript 'document.cookie'はこのトリックを行います。 – mVChr

+0

申し訳ありません。これについてもう少し詳しく説明できますか? – Thereissoupinmyfly

+0

ユーザーが認証されていない場合は、完了したタスクをCookieに保存します。ユーザーがログインすると、クッキーが存在する場合はそのクッキーからタスクを取り出し、ユーザーに関連して保存します。 – mVChr

答えて

0

セッションデータは、ユーザーがログインしても破棄されません。データは新しいセッション(キーは "cycled")に保存されます。引き続きrequest.session['mykey']を使用することはできます。 TaskCompletedインスタンスの所有権を維持/変更するには、いくつかのことができます。 1つのオプションは、匿名ユーザーのセッションにTaskCompletedインスタンスIDを保存し、成功したログイン時にそのインスタンスをユーザーに割り当てるためにログインビューをオーバーライドすることです。 (これに従うと、モデルにsession = models.ForeignKey()フィールドは必要ありません)

関連する問題