2011-11-17 9 views

Respuesta

9

Puede utilizar 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) 
+0

He intentado esto, pero estaba recibiendo un error. Resultó que estoy usando la versión de Django (1, 1, 1, 'final', 0) y esto funciona solo para Django 1.3 y superior. Intentaré actualizar pero ¿conoces algún otro método? ¡Gracias! –

+0

@Rohit: ¿Cuál fue el error en 1.1.1? Estas señales existían en 1.1.1, la configuración puede ser un poco diferente, o tengo un error tipográfico. – sdolan

+1

@RohitAgarwal: Eché un vistazo a los documentos antiguos y actualicé la parte inferior de mi ejemplo de lo que debería funcionar para 1.1.1. – sdolan

21

Extendiendo sdolan' s answer utilizando receiver decorador:

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

Esto es lo que funciona ahora con django 1.10, en lugar de la respuesta aceptada que era presumiblemente correcta para versiones anteriores. – LisaD

Cuestiones relacionadas