【问题标题】:django - how do i use annotations with signals?django - 我如何使用带有信号的注释?
【发布时间】:2012-09-20 16:39:00
【问题描述】:

或者更确切地说,当我包含来自 models.py 的信号.py 时,我遇到了 Django 和信号的旧双重导入问题

我宁愿不必为信号输入“只运行一次”代码,但如果我绝对必须这样做,我可能会这样做。这似乎是一个愚蠢的黑客行为。

不管怎样,

假设我有一个 signals.py 文件,并且其中一个信号用于 models.py 中定义的对象之一,我如何为它创建注释?

如果我包含该模型,那么我会遇到 Python 令人困惑的“循环引用”问题,它似乎仍然会被绊倒。虽然只是 2012 年。

我尝试使用 get_model,但这似乎不起作用...现在调用信号以用于 all 保存模型中的 任何和所有 模型.py 文件。

这里是注解,它现在的样子:

@receiver(pre_save, sender=get_model('myapp.models','Story'))

我也试过了

@receiver(pre_save, sender=Story)

上面有对应的from myapp.models import Story,但是导致了描述的导入错误。

我该怎么办?

【问题讨论】:

    标签: django


    【解决方案1】:

    这样卡住时,我只注册接收者而不指定发送者,然后在函数体内进行模型导入。

    @receiver(pre_save)
    def handler(sender, instance, created, **kwargs):
        from models import MyModel
        if not isinstance(sender, MyModel):
            return
        do_stuff()
    

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 2019-04-18
      • 2014-04-22
      • 1970-01-01
      • 2019-08-03
      • 2013-05-02
      • 2012-04-05
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多