Je veux exécuter du code dans un modèle Django lors de sa première création. Après cela, chaque fois qu'il est sauvegardé, je veux exécuter un autre code. La deuxième tâche peut être facilement effectuée en remplaçant la méthode save(). Comment puis-je faire la première tâche?Exécuter du code sur la création de modèle dans Django
6
A
Répondre
9
Vous pouvez utiliser 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
Extension sdolan' s answer en utilisant receiver
décorateur:
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
C'est ce qui fonctionne maintenant avec django 1.10, plutôt que la réponse acceptée qui était probablement correcte pour les versions antérieures. – LisaD
Questions connexes
- 1. Exécuter le code après validation de la transaction dans Django
- 2. Exécuter du code lors de la création d'un javabean
- 3. Création d'instances de modèle dans un modèle Django
- 4. django modèle de code réutilisable
- 5. Comment exécuter un code après la création du fichier?
- 6. création de modèle Django domaines conjointement uniques
- 7. django - Automatiser la création du fichier models.py?
- 8. Django récupérer la valeur du modèle
- 9. Modification du modèle de base basé sur request.user dans Django
- 10. django affichage de la valeur du modèle
- 11. Comment générer du code de modèle d'instance de modèle standardisé dans django?
- 12. Comment puis-je exécuter du code lorsque la méthode de sauvegarde d'un modèle Django est appelée pour la première fois?
- 13. Aide à la création de modèle pour l'application Django
- 14. Création d'une liste à la volée dans un modèle Django
- 15. Django Multi-Table héritage et la création de modèle
- 16. Exécuter du code au démarrage de xtext?
- 17. Inclusion du modèle Django
- 18. itération des attributs de modèle lors de la création d'un modèle dans Django
- 19. Création d'un formulaire à partir du modèle d'utilisateur Django
- 20. Django héritage du modèle
- 21. Code spécifique à l'instance de modèle Django
- 22. Méthodes du modèle django
- 23. Personnalisation du modèle Django
- 24. objet modèle Django avec la création de clé étrangère
- 25. Création d'un modèle d'édition Infragistics à l'aide du code
- 26. Création d'une valeur dans un formulaire de modèle django
- 27. Comment exécuter du code après la création d'une activité dans Android?
- 28. Question du modèle Django?
- 29. Obtention du nom de modèle dans le modèle django
- 30. Création de minuscules minuscules pour les objets de modèle Django tout en maintenant le code propre
J'ai essayé mais devenais une erreur. Il s'est avéré que j'utilise Django version (1, 1, 1, 'final', 0) et cela ne fonctionne que pour Django 1.3 et supérieur. Je vais essayer de mettre à niveau mais connaissez-vous une autre méthode? Merci! –
@Rohit: Quelle était l'erreur dans 1.1.1? Ces signaux existaient en 1.1.1, la configuration peut être un peu différente, ou j'ai une faute de frappe. – sdolan
@RohitAgarwal: J'ai regardé les anciens docs et mis à jour le bas de mon exemple de ce qui devrait fonctionner pour 1.1.1. – sdolan