bha*_*ral 4 django django-signals
阅读了文档,
我在我的signals.py文件中创建了这个:
from django.db.models.signals import post_save
from django.dispatch import receiver
from models import User
from models import Story
@receiver(post_save, sender=User)
def create_initial_story(sender,instance, signal, created, **kwargs):
print "helloooo!"
if created:
Story(user = instance, title = 'Random Stories', description="Random stories", is_closed = False, is_random = True).save()
Run Code Online (Sandbox Code Playgroud)
从我读到的,我认为我需要做的就是发送信息.好吧,那并创建一个新用户(我使用django注册框架)然而,没有发送任何东西(好吧,我没有做任何接收器方法).我还删除了@receiver注释的"sender = User"参数 - 离开
@receiver(post_save)
Run Code Online (Sandbox Code Playgroud)
但那没有关系.没有任何内容输出到控制台,没有保存新数据... 当用户保存时,我是否需要从用户发送信号?如果是这样,我该怎么做?我正在使用django-registration,所以我有一个UserProfile定义...我的意思是,在哪里(在什么文件/方法中)我会告诉用户发送信号?
你应该导入你的signals.py某个地方来运行它.例如在models.py.
首先,他们被称为"装饰者".Django中的注释是其他的东西,所以最好不要混淆那里的术语.
post_save顾名思义,每次保存后都会调用该信号.指定sender限制接收器仅post_save发送信号以保存该特定模型.如果你把它放在外面,你的接收器将在任何型号保存时被调用,这肯定不是你想要的.
在这里你的问题是,你的接收器,对所有意图和目的不存在.Django不会自动导入导入signals.py,因此从未见过.让它看到的唯一方法是将它导入Django确实看到的地方,例如models.py(如@DrTyrsa)所暗示的那样.
但是,如果这样做,您将最终导致循环导入错误,因为您已经将models.py导入signals.py.因此,您可以直接将信号代码放入models.py中,或者在其他地方找到它来导入它; __init__.py可能会工作,但我通常只是将我的信号放在models.py中并称之为一天.
| 归档时间: |
|
| 查看次数: |
10824 次 |
| 最近记录: |