django model on create benutzen __init__?

8

Sagen wir, ich habe eine Klasse namens Hero mit einem Feld namens "name". Jedes Mal, wenn ein neues Hero-Objekt erstellt wird, möchte ich " is a hero" anhängen. Kann ich __init__ dafür verwenden? Oder gibt es eine Django-spezifische Methode, die ich dafür überschreiben kann?

%Vor%     
Joey 05.08.2012, 23:26
quelle

1 Antwort

15

Wenn "jedes Mal, wenn ein neues Hero-Objekt erstellt wird" meinst "jedes Mal, wenn ein Hero-Datensatz in der Datenbank erstellt wird", dann nein, das möchtest du nicht in der __init__ -Methode tun, seit dem Wird jedes Mal aufgerufen, wenn ein Hero-Objekt in Python erstellt wird, auch wenn Sie gerade einen vorhandenen Datensatz von der Datenbank erhalten.

Um zu tun, was Sie wollen, können Sie Djangos post_save-Signal verwenden und überprüfen im Signal-Callback, dass der Parameter created keyword True ist und Ihre "on creation" -Logik ausführt, falls dies der Fall ist.

Alternativ, und einfacher und natürlich in bestimmten Fällen, können Sie Hero% save() Methode wie folgt überschreiben:

%Vor%

Beachten Sie, dass Djagnos bulk_create -Methode das Auslösen entweder des post-save-Signals oder des Aufrufs von save überspringt.

    
Ghopper21 06.08.2012, 02:13
quelle

Tags und Links