2017-03-16 48 views
1

如何處理外鍵,如用戶或用戶名可能有一天會被刪除?如何處理用戶作爲外鍵和刪除

我最好的猜測是CharField的選擇侷限於引用字段,因爲刪除ForeignKey會導致級聯刪除。

我想保存例如與該對象相關的用戶的名稱,即使原始用戶對象已被刪除。

會是這樣的工作:

def set_user_name(self): 
    self.user_name = self.user.name 
    return None 

user = models.ForeignKey(User, 
         blank=True, 
         null=True, 
         on_delete=models.SET(set_user_name)) 
user_name = models.CharField(max_length=50, blank=True, null=True) 
+1

更多的資源,我已經回答了類似的問題[這裏](http://stackoverflow.com/questions/42632464/how-can-i-set-user-全名 - 中 - 外鍵場,與用戶模型,使用上,刪除/ 42634422#42634422)。這個想法是將'CharField'和'ForeignKey'一起存儲。 –

+0

(我已經修復並更新了下面的答案) – Udi

回答

1

一個關係數據庫中的常見做法是避免刪除具有(或可能)記錄有關的單位和通過添加採用「軟刪除」模式,而不是active = BooleanField(default=True)deleted = BooleanField(default=False)字段。

Django的內置User模型有一個is_active字段,可用於此目的。

見關於在Django軟刪除delete grid in djangopackages.org