Ich verwende Djangos pre_save-Signal, um auto_now_add zu implementieren. Im Internet gibt es viele Diskussionen darüber, warum Sie es selbst implementieren sollten oder nicht. Ich schätze Kommentare dazu nicht. Weder auf, ob ich die Speicherfunktion neu schreiben sollte (ich habe viele Modelle, die auto_now_add verwenden, so dass die Verwendung von Signalen sinnvoll ist).Django pre_save signal: prüfen, ob die Instanz erstellt wurde nicht aktualisiert, existiert kwargs ['created'] (noch)?
Meine Frage ist:
Ich möchte überprüfen, ob die Instanz erstellt oder aktualisiert wird. Laut einigen Quellen im Internet kann dies durch Testen erfolgen, wenn kwargs['created']
True ist. Allerdings erscheint 'created'
nicht in meinem kwargs
, obwohl die Instanz neu erstellt wird. Ich habe mich nur gefragt, ob es jemals existiert hat oder dass es magisch verschwunden ist. Ich weiß, ich könnte auch testen, ob kwargs['instance'].id
gesetzt ist (das funktioniert tatsächlich für mich), aber ich würde gerne wissen, ob Kwargs ['erstellt'] noch existiert.
Eine Sache zu beachten ist, dass wenn die Instanz-ID/pk gesetzt ist, dies nicht unbedingt bedeutet, dass das Objekt in der Datenbank existiert. Ein häufiges Beispiel wäre, wenn diese Instanzen von __fixtures__ geladen werden. –
@Botondus: Gibt es einen besseren Weg (um das von Ihnen erwähnte Problem zu vermeiden) zu überprüfen, ob die Instanz neu erstellt wird oder ob sie während pre_save aktualisiert wird? – Heyl1
Ja, wenn PK festgelegt ist, müssen Sie die Datenbank tatsächlich abfragen, um sicher zu entscheiden, ob eine Instanz bereits erstellt wurde oder nicht. Etwas wie: MyModel.objects.filter (pk = pk_val) .exists() Es ist tatsächlich in ähnlicher Weise in Django Interna implementiert: http://code.djangoproject.com/browser/django/trunk/django/db/ models/base.py # L493 –