【问题标题】:django how do i send a post_save signal when updating a user?django 更新用户时如何发送 post_save 信号?
【发布时间】:2012-05-31 02:40:53
【问题描述】:

阅读过文档,

https://docs.djangoproject.com/en/dev/topics/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()

根据我的阅读,我认为我需要做的就是发送消息。好吧,那并创建一个新用户(我使用 django-registration 框架)但是,没有发送任何内容(好吧,我拥有的接收器方法什么都不做)。我还删除了 @receiver 注释的“sender=User”参数 - 离开

@receiver(post_save)

但这无济于事。没有任何东西输出到控制台,没有新数据被保存......当用户被保存时,我是否需要发送来自用户的信号?如果是这样,我会怎么做?我正在使用 django-registration,所以我定义了一个 UserProfile...我的意思是,我会告诉用户在哪里(在什么文件/方法中)发送信号?

【问题讨论】:

    标签: django django-signals


    【解决方案1】:

    或者你可以使用这个:

    from django.db.models.signals import post_save
    

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
    【解决方案2】:

    首先,它们被称为“装饰器”。注解在 Django 中是另外一回事,所以最好不要在这里混淆术语。

    post_save 信号,顾名思义,每次保存后都会被调用。指定sender 将接收器限制为仅发送post_save 信号以保存该特定模型。如果你忽略它,当 any 模型被保存时,你的接收器将被调用,这肯定不是你想要的。

    你的问题是你的接收者,无论出于何种意图和目的,都不存在。 Django 不会为你自动导入 import signals.py,所以从来没有见过。看到它的唯一方法是将其导入 Django 确实会查看的位置,例如 models.py(如 @DrTyrsa 建议的那样。

    但是,如果您这样做,最终会出现循环导入错误,因为您已经将 models.py 导入到 signals.py 中。因此,您可以将信号代码直接放入 models.py 中,也可以找其他地方导入; __init__.py 可能会起作用,但我通常只是将我的信号放在 models.py 中并收工。

    【讨论】:

    • 或使用django.db.models.get_model。 :-)
    【解决方案3】:

    您应该在某处导入您的signals.py 以运行它。例如models.py

    【讨论】:

    • hm,我对 python 有点陌生——所以除了导入信号行之外,我是否需要在 models.py 中调用它?或者我可以直接导入它并保留它吗?
    • @bharal 只需导入。你需要以某种方式运行它。并在signals.py 中使用django.db.models.get_model 以防止循环导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2011-05-05
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多