2016-12-28 106 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中。當用戶登錄時,將任務從cookie中提取,如果存在並保存與用戶相關的任務。 – mVChr

回答

0

會話數據在用戶登錄時未被破壞 - 數據保存到新會話中(密鑰爲「cycled」)。您仍然可以使用request.session['mykey']。您可以做一些事情來堅持/更改您的TaskCompleted實例的所有權。一種選擇是在會話中爲匿名用戶保存TaskCompleted實例ID,並覆蓋登錄視圖以在成功登錄時將該實例分配給用戶。 (如果你遵循這一點,你將不需要在你的模型中的session = models.ForeignKey()字段)