2017-03-16 3 views
1

Wie gehe ich mit fremden Schlüsseln wie Benutzern oder Benutzernamen um, die eines Tages gelöscht werden könnten?Umgang mit Benutzern als Fremdschlüssel und Löschen

Meine beste Schätzung wäre ein CharField mit Choices, das auf das Referenced Field beschränkt ist, da das Löschen eines ForeignKey zu einer Kaskadenlöschung führen würde.

Ich möchte z. B. den Namen des Benutzers für das Objekt beibehalten, auch wenn das ursprüngliche Benutzerobjekt gelöscht wurde.

wäre so etwas wie dieses Werk:

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

Ich habe eine ähnliche Frage beantwortet [hier] (http://stackoverflow.com/questions/42632464/how-can-i-set-user- Vollständiger Name-in-Fremdschlüssel-Feld-mit-Benutzer-Modell-Verwendung-auf-löschen/42634422 # 42634422). Die Idee ist, ein "CharField" zusammen mit "ForeignKey" zu speichern. –

+0

(Ich habe meine Antwort unten korrigiert und aktualisiert) – Udi

Antwort

1

Eine der gängigen Praktiken in relationalen Datenbanken Löschen von Datensätzen vermeiden, die (oder haben könnte) haben verbundenen Unternehmen und beschäftigen ein „soft löschen“ Muster stattdessen ein durch Hinzufügen active = BooleanField(default=True) oder deleted = BooleanField(default=False) Feld.

Djangos eingebautes User Modell hat ein is_active Feld, das für diesen Zweck verwendet werden kann.

Mehr über Ressourcen soft in Django löschen in der delete grid in djangopackages.org

Verwandte Themen