我有一个要在其上实现信号的post_save的模型。这是我的模型:
class Answer(models.Model): question = models.ForeignKey( Question, related_name='answers_list', on_delete=models.CASCADE) answer = models.CharField(max_length=500) additional = models.CharField( max_length=1000, null=True, blank=True, default=None ) created_at = models.DateTimeField(auto_now_add=True)
我正在尝试捕捉Answer的创作。我使用以下上下文创建了一个新的signal.py文件:
from django.dispatch import receiver from django.db.models.signals import post_save from core.models import Answer @receiver(post_save, sender=Answer) def answer_question(sender, instance, **kwargs): print("CAUGHT A SIGNAL") print(instance.question.sentence, instance.answer)
但是当我创建一个新的答案时,它似乎并没有触发信号(我正在通过前端创建它,因为我正在使用django-rest-framework)。我的控制台中没有任何东西,而不是去我API的POST方法。
怎么了?
答案 0 :(得分:1)
我们需要注册来自IListItemsCollectionPage items = await graphClient
.Sites[targetstate_id]
.Lists[targetlist_id]
.Items
.Request()
.Expand("fields")
.GetAsync();
函数的信号。 link
在这里,我们需要连接信号。希望这能解决您的问题。如果您的应用程序不属于AppConfig.ready()
,请别忘了添加 init .py
我想添加一个额外的link,请仔细阅读INSTALLED_APPS
部分,这将消除您的疑问。
答案 1 :(得分:1)
Django-debug-toolbar帮助您获取有关信号的更多信息。只需在您的settings.py中声明它们即可:
DEBUG_TOOLBAR_CONFIG = {
'EXTRA_SIGNALS': [
'myapp.signals.my_signal1',
'myapp.signals.my_signal2',
],
}
有一个面板,显示所有声明给dj-toolbar及其接收器的信号。
答案 2 :(得分:0)
您必须重写应用程序配置类的ready方法。
将在apps.py中定义应用程序配置类。覆盖准备方法如下
from django.apps import AppConfig
class YourAppConfig(AppConfig):
name = 'your_app'
def ready(self):
import your_app.signal
在项目settings.py中,按以下方式更新已安装的应用程序:
替换
INSTALLED_APPS = (
'...',
'your_app',
)
使用
INSTALLED_APPS = (
'...',
'your_app.apps.YourAppConfig',
)
根据django 3.0文档,无需在init.py中添加default_app_config https://docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready