我有一个信号 -
@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”必须是“用户”实例。
原来如此!我该怎么做才能解决这个问题?
答案 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)