Was ist der richtige Weg für benutzerdefinierte Instanzattribute in Django-Modellen?

8

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?

  1. überschreiben die __init__ -Methode: Die Syntax ist ein bisschen verschachtelt, aber es funktioniert.

    %Vor%
  2. Verwenden Sie ein Django post_init -Signal: Dies nimmt Klassencode außerhalb der Klassendefinition, der nicht sehr lesbar ist.

    %Vor%
  3. 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?

    
Régis B. 22.01.2013, 16:35
quelle

2 Antworten

3

Das Überschreiben von __init__ ist der richtige Weg.

    
Pawel Furmaniak 22.01.2013, 18:05
quelle
7

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 ()

aufzurufen

Sie könnten sogar ein wenig mehr geradlinig damit erreichen, indem Sie das Fallback anstelle von

einbauen lassen %Vor%     
Bryan 22.01.2013 16:37
quelle

Tags und Links