Ich möchte zu Instanzen eines Django-Modells benutzerdefinierte Attribute hinzufügen. Diese Attribute sollten nicht in der Datenbank gespeichert werden. In jeder anderen Klasse würden die Attribute einfach mit der Methode __init__
initialisiert.
Ich kann bereits drei verschiedene Arten sehen, dies zu tun, und keines von ihnen ist völlig befriedigend. Ich frage mich, ob es einen besseren / mehr pythonischen / djangoistischen Weg gibt, es zu tun?
überschreiben die __init__
-Methode: Die Syntax ist ein bisschen verschachtelt, aber es funktioniert.
Verwenden Sie ein Django post_init
-Signal: Dies nimmt Klassencode außerhalb der Klassendefinition, der nicht sehr lesbar ist.
Verwenden Sie eine Instanzmethode anstelle eines Attributs: eine allgemeine Ausnahme ausgelöst zu haben, da das Standardverhalten etwas störend ist.
%Vor%Von diesen drei Möglichkeiten sieht das erste für mich am wenigsten schlecht aus. Was denken Sie? Irgendwelche Alternative?
Ich würde den in python verfügbaren Property-Decorator verwenden
%Vor%Dann können Sie genau wie eine Eigenschaft darauf zugreifen, anstatt eine Funktion mit ()
aufzurufenSie könnten sogar ein wenig mehr geradlinig damit erreichen, indem Sie das Fallback anstelle von
einbauen lassen %Vor%Tags und Links python django django-models