2011-03-29 98 views
4

工作,我有兩個表:Django的post_save()信號

class Advertisement(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True) 
    author_email = models.EmailField() 

class Verification(models.Model): 
    advertisement = models.ForeignKeyField(Advertisement) 
    key = models.CharField(max_length=32) 

,我需要自動填入驗證表中增加新的廣告之後。

def gen_key(sender, instance, created, **kwargs): 
    if created: 
     from hashlib import md5 
     vkey = md5("%s%s" % (instance.author_email, instance.created_at)) 
     ver = Verification(advertisement=instance) 
     ver.key = vkey 
     ver.save() 

post_save.connect(gen_key, sender=Advertisement) 

當然,這是行不通的。 Django 1.2 問:我應該怎麼做?


好的,一半解決了。
問題是父模型的post_save()不會調用子模型。
所以你可以通過直接提供子類來解決它。

class Advertisement(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True) 
    author_email = models.EmailField() 

class Sale(Advertisement): 
    rooms = models.IntegerField(max_length=1) 
    subway = models.ForeignKey(Subway) 

class Verification(models.Model): 
    advertisement = models.ForeignKeyField(Advertisement) 
    key = models.CharField(max_length=32) 

def gen_key(sender, instance, created, **kwargs): 
    code goes here 
post_save.connect(gen_key, sender=Sale, dispatch_uid="my_unique_identifier") 

所以接下來的問題是「我如何使用父類post_save()?」

+0

哪一部分不工作? – 2011-03-29 13:09:10

+0

代碼似乎是正確的,什麼不工作?驗證記錄沒有被創建? – 2011-03-29 13:15:59

+0

在下面回答。 – mktums 2011-03-29 13:31:43

回答

4

,而不是連接到特定發件人,只需連接一般要post_save和檢查類的實例保存在你的處理器如

def gen_key(sender, **kwargs): 
    if issubclass(sender, Advertisement): 
     code goes here 
post_save.connect(gen_key, dispatch_uid="my_unique_identifier") 
+0

這對我有效,但它仍然讓我感到困惑,我無法在連接上指定發件人'post_save.connect(gen_key,sender ='MyClass',dispatch_uid =「my_unique_identifier」)' – 2013-04-12 19:43:26

+0

你可以這樣做,我的回答只有意義關於下面的@mkturns後續問題,其中的意圖是連接父類和子類。 'connect'方法只執行'isinstance'類型的檢查,所以在這種情況下,你想連接沒有發送者,並在你自己的信號處理程序中執行'issubclass'檢查 – Anentropic 2013-04-13 23:47:57

+0

感謝您指出。我在'isinstance'上讀'issubclass'。我的錯。現在有道理。 – 2013-04-14 15:28:10

相關問題