Voglio eseguire del codice in un modello Django quando viene creato per la prima volta. Dopodiché ogni volta che viene salvato voglio eseguire qualche altro codice. La seconda attività può essere facilmente eseguita sovrascrivendo il metodo save(). Come posso fare il primo compito?Esegui codice sulla creazione del modello in Django
6
A
risposta
9
È possibile utilizzare django signals 'post_save
:
# models.py
from django.db.models import signals
class MyModel(models.Model):
pass
def my_model_post_save(sender, instance, created, *args, **kwargs):
"""Argument explanation:
sender - The model class. (MyModel)
instance - The actual instance being saved.
created - Boolean; True if a new record was created.
*args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments.
"""
if created:
# your code goes here
# django 1.3+
from django.dispatch import dispatcher
dispatcher.connect(my_model_post_save, signal=signals.post_save, sender=MyModel)
# django <1.3
from django.db.models.signals import post_save
post_save.connect(my_model_post_save, sender=MyModel)
21
Estendere sdolan' s answer utilizzando receiver
decoratore:
from django.db import models
from django.dispatch import receiver
class MyModel(models.Model):
pass
@receiver(models.signals.post_save, sender=MyModel)
def execute_after_save(sender, instance, created, *args, **kwargs):
if created:
# code
+2
Questo è ciò che funziona ora con django 1.10, piuttosto che la risposta accettata che era presumibilmente corretta per le versioni precedenti. – LisaD
Problemi correlati
- 1. Django - Esegui codice all'avvio
- 2. come eseguire questo codice in modello Django
- 3. Esegui comando dopo la creazione del Webpack
- 4. Serializzazione Django del modello ereditato
- 5. Django - Confronta il codice modello nel database
- 6. Esegui richiamata sulla filettatura principale
- 7. Esegui codice all'avvio del debugger VisualStudio
- 8. Esegui script python online (django)
- 9. Django ManyToMany validazione del modello
- 10. Ottieni i campi del modello in Django
- 11. Scelte del modello di Django
- 12. Django - scadenza cache del modello Django in base a variabili
- 13. Esegui codice prima di qualsiasi comando di gestione di django
- 14. Django Haystack: responsabilità del modello e degli indici del modello
- 15. Esegui codice php in Python
- 16. Creazione matrice JSON in Django
- 17. Dropdown in Django Modello
- 18. Estensione del profilo utente in Django. Admin creazione di utenti
- 19. Esecuzione del codice all'avvio in Django 1.7
- 20. Esegui codice C# su GPU
- 21. Esegui codice rubino in un ambiente limitato
- 22. Esegui "app" con copertura del codice in Android Studio
- 23. creazione del mio processore di contesto in django
- 24. Come funzionano i campi del modello Django?
- 25. Django - valori del campo in linea sulla base all'istanza padre
- 26. Come estendi il modello Site in django?
- 27. Esegui codice Java online
- 28. Modulo% in modello Django
- 29. Django: accede all'istanza del modello da ModelAdmin?
- 30. oggetto modello di Django con la creazione di chiave esterna
ho provato questo, ma è stato sempre un errore. Ho scoperto che sto usando la versione di Django (1, 1, 1, 'final', 0) e funziona solo con Django 1.3 e successivi. Proverò ad aggiornare ma conosci qualche altro metodo? Grazie! –
@Rohit: qual è stato l'errore in 1.1.1? Questi segnali esistevano in 1.1.1, l'installazione potrebbe essere leggermente diversa, o ho un refuso. – sdolan
@RohitAgarwal: ho dato uno sguardo ai vecchi documenti e aggiornato il fondo del mio esempio di cosa dovrebbe funzionare per 1.1.1. – sdolan