2012-05-24 36 views
1

我有一個信號 -django和get_model的信號?

@receiver(post_save, sender=User) 
def create_initial_story(sender,instance, signal, created, **kwargs): 
    if created: 
     Story(user = instance, title = 'Random Stories', 
      description="Random stories", 
      is_closed = False, is_random = True).save() 

這是很酷,但我真的不希望在我的models.py

它獲得「雙進口」不知怎的,我有這個信號寧願那不會發生。是的,我知道阻止信號運行兩次的魔術,但我不相信這一點。爲什麼我的應用程序要做兩次工作!瘋!

有人建議我使用django.db.models.get_model,但我不知道該怎麼做!我嘗試也不太作品 - 這裏是我的嘗試:

from django.db.models import get_model 

@receiver(post_save, sendermodel('myapp','User')) 
def create_initial_story(sender,instance, signal, created, **kwargs): 
    if created: 
     get_model('myapp','Story').(user = instance, title = 'Random Stories', 
      description="Random stories", 
      is_closed = False, is_random = True).save() 

這會產生一個例外 -

無法分配「<故事:隨機故事>」:「Story.user」必須是「用戶「例子。

所以!我能做些什麼來解決這個問題?

回答

3

您的問題就在這裏:

get_model('myapp','Story').(user = instance, title = 'Random Stories', 
     description="Random stories", 
     is_closed = False, is_random = True).save() 

get_model返回模型類,所以你仍然需要objects.create實際創建一個實例。而且,最後你不需要save()。嘗試:

get_model('myapp','Story').objects.create(user = instance, title = 'Random Stories', 
     description="Random stories", 
     is_closed = False, is_random = True) 
+0

嘿,任何想法,其中的django文檔get_model是?我的搜索在他們的網站和谷歌產量nada! – bharal