1

我有一个信号——

@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”必须是“用户”实例。

所以!我能做些什么来解决这个问题?

4

1 回答 1

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)
于 2012-05-24T16:38:58.613 回答