django和get_model的信号?

时间:2012-05-24 16:32:08

标签: django django-signals

我有一个信号 -

@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:Random Stories>”:“Story.user”必须是“用户”实例。

原来如此!我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分: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)