2012-01-18 15 views
5

Bunu daha önce hakkında soru okumuştu yemin, ama öyle, bulamıyorum: yeni bir model örneği veritabanına kaydedildiğindeİlk kez bir Django modelinin kaydetme yöntemi çağrıldığında bazı kodları nasıl çalıştırabilirim?

Django yılında

, nasıl bazı kod çalıştırabilir?

Model örneği kaydedildiğinde bazı kodları çalıştırmak için özel bir MyModel().save() yöntemini yazabileceğimi biliyorum. Fakat kodu ilk kez yalnızca bir model örneği kaydedildiğinde nasıl çalıştırabilirim?

cevap

5

Django belgeleri zordu, burada daha açık bir örnek

from django.db.models.signals import post_save 
from yourapp.models import YourModel 

def model_created(sender, **kwargs): 
    the_instance = kwargs['instance'] 
    if kwargs['created']: 
     do_some_stuff(the_instance) 

post_save.connect(model_created, sender=YourModel) 
+0

Hmmmm. Sinyalleri hiç sevmedim (uzaktaki ürkütücü eylem). Ayrıca - bunu yapmak için iki farklı yolun olması tuhaf - eldeki kaydetme() ve diğer tarafta bir sinyal. –

+0

Modelde tanımlanan tanımda eksik bir ":" var – rsm

4

Ah evet: the post_save signal onun örnek save() çağrısıyla oluşturulmuşsa, True olduğunu created adlı bir argüman, geçer. Beni ilk başta grok için

+2

self.pk bulunuyorsa da kontrol edebilirsiniz var yöntemini kaydetmek - Ben karmaşıklığına bağlı olarak yapmak istiyorum genellikle seçim . Auto_now_add'den önce bir zaman damgasının ayarlanması örneğin :) –

İlgili konular