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?
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:
Beachten Sie, dass Djagnos bulk_create
-Methode das Auslösen entweder des post-save-Signals oder des Aufrufs von save
überspringt.
Tags und Links django django-models