Sto usando il segnale pre_save di Django per implementare auto_now_add. C'è un sacco di discussioni su internet sul perché dovresti o non dovresti implementarlo tu stesso. Non apprezzo i commenti su questo. Non so se dovrei riscrivere la funzione di salvataggio (ho molti modelli che usano auto_now_add quindi usare i segnali ha senso).Segnale pre_save Django: controlla se l'istanza non viene aggiornata, kwargs ['created'] (still) esiste?
La mia domanda è:
Vorrei verificare se l'istanza è stata creata o aggiornata. Secondo alcune fonti su Internet questo può essere fatto testando se kwargs['created']
è True. Tuttavia, 'created'
non viene visualizzato nel mio kwargs
anche se l'istanza è stata appena creata. Mi stavo chiedendo se è mai esistito o che è scomparso magicamente. So che potrei anche provare se è impostato kwargs['instance'].id
(questo di fatto funziona per me), ma mi piacerebbe sapere se kwargs ['created'] esiste ancora.
Una cosa da tenere a mente è che se l'id/pk dell'istanza è impostata, ciò non significa necessariamente che l'oggetto esiste nel database. Un esempio comune sarebbe se quelle istanze sono caricate da __fixtures__. –
@Botondus: Esiste un modo migliore (per evitare il problema che si sta menzionando) per verificare se l'istanza è stata appena creata o se viene aggiornata durante il pre_save? – Heyl1
Sì, se è impostato PK, è necessario interrogare il database per decidere con certezza se un'istanza è già stata creata o meno. Qualcosa come: MyModel.objects.filter (pk = pk_val) .exists() In realtà è implementato in modo simile negli interni di Django: http://code.djangoproject.com/browser/django/trunk/django/db/ models/base.py # L493 –