2011-11-17 19 views

Odpowiedz

9

Można użyć 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

próbowałem tego, ale został otrzymuję błąd. Okazało się, że używam wersji Django (1, 1, 1, "końcowy", 0), a to działa tylko dla Django 1.3 i wyżej. Spróbuję dokonać aktualizacji, ale czy znasz inną metodę? Dzięki! –

+0

@Rohit: Jaki był błąd w wersji 1.1.1? Sygnały te istniały w wersji 1.1.1, konfiguracja może być trochę inna lub mam literówkę. – sdolan

+1

@RohitAgarwal: Zerknąłem na stare dokumenty i zaktualizowałem dół mojego przykładu, co powinno działać dla 1.1.1. – sdolan

21

Rozszerzanie sdolan' s answer za pomocą receiver dekorator:

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

To właśnie działa teraz z django 1.10, zamiast akceptowanej odpowiedzi, która była prawdopodobnie poprawna dla wcześniejszych wersji. – LisaD

Powiązane problemy