python / intermediate
Snippet
Dekonstruktion benutzerdefinierter Django-Modellfelder für Migrationen
Beim Erstellen eigener Django-Modellfelder teilt die Implementierung der deconstruct()-Methode dem Migration-Framework mit, wie benutzerdefinierte Argumente in Migrationsdateien serialisiert werden.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
from django.db import modelsfrom typing import Any, Tuple, Dictclass EncryptedCharField(models.CharField):def __init__(self, *args: Any, secret_key_name: str = "DEFAULT_KEY", **kwargs: Any) -> None:self.secret_key_name = secret_key_namesuper().__init__(*args, **kwargs)def deconstruct(self) -> Tuple[str, str, list, Dict[str, Any]]:name, path, args, kwargs = super().deconstruct()kwargs["secret_key_name"] = self.secret_key_namereturn name, path, args, kwargs
django
Erklärung
1
class EncryptedCharField(models.CharField):
Defines ein benutzerdefiniertes Modellfeld, das von Djangos CharField erbt.
2
def __init__(self, *args: Any, secret_key_name: str = "DEFAULT_KEY", **kwargs: Any) -> None:
Akzeptiert den eigenen Parameter secret_key_name zusätzlich zu Standard-Field-Argumenten.
3
def deconstruct(self) -> Tuple[str, str, list, Dict[str, Any]]:
Implementiert die deconstruct-Methode zur Rückgabe von 4 Elementen für die Migrations-Serialisierung.
4
name, path, args, kwargs = super().deconstruct()
Ruft die dekonstruierten Werte der Elternklasse ab.
5
kwargs["secret_key_name"] = self.secret_key_name
Fügt den eigenen Parameter in das Keyword-Arguments-Dict ein, damit Migrationen ihn wiederaufbauen können.