【问题标题】:Cant get post_save to work in Django无法让 post_save 在 Django 中工作
【发布时间】:2013-06-23 05:14:57
【问题描述】:

我阅读了django docs 关于signals 并为我的模型Car 编写了这段代码:

@receiver(request_finished)
def signal_callback(sender, **kwargs):
    print 'Save Signal received'


@receiver(post_save, sender=Car)
def signal_handler(sender, **kwargs):
    pass


request_finished(signal_callback, sender=car, dispatch_url="Unique save id")

但问题是,当我启动服务器并打开管理员时,我的终端中会收到很多 'Save Signal received'。我想知道的是我只将signal_handler 限制为post_save。但是,即使没有保存任何内容,该消息仍会出现很多次。我不明白这一点。

注意:我会说实话。我理解了其中的一部分,而不是文档中的所有内容。

【问题讨论】:

    标签: python django django-signals


    【解决方案1】:

    有一种更简单的方法可以绑定post_save signals

    from django.db.models.signals import post_save
    from myapp.models import Car
    
    def do_something(sender, **kwargs):
        print 'the object is now saved.'
        car = kwargs['instance'] #now i have access to the object
    
    post_save.connect(do_something, sender=Car)
    

    信号request finished 会在每次发出 HTTP 请求时被调用,这很麻烦。

    【讨论】:

      【解决方案2】:

      您将request_finished 信号绑定到signal_callback。删除(或注释掉)signal_callback,并更改signal_handler,如下所示。

      @receiver(post_save, sender=Car)
      def signal_handler(sender, **kwargs):
          print 'Save signal received'
      

      【讨论】:

      • 然后我应该将request_finishedsignal_handler 绑定?
      • 那么应该发送信号的方法呢?
      • signal_handlerCar.objects.create(...)Car(...).save() 被调用时被调用。
      • 是的,行得通。但我不是很好掌握。是不是就像request_finished 在保存信号时发送信号并在signal_handler 捕获信号一样?
      • request_finished 与保存无关。处理 http 请求时会触发 request_finished 信号。
      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2015-01-12
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多