我正在尝试编写一个 Django 自定义命令,该命令将用作与物理连接到服务器的硬件进行交互的守护进程。出于显而易见的原因,我不想在我的 Django 视图中运行与硬件相关的命令。相反,我宁愿让视图只与模型交互,并让守护进程监听来自模型的 Django post_save 信号。
为了测试,我有这个自定义命令:
from django.core.management.base import BaseCommand
from django.core.management.base import CommandError
from thermostat.models import Relay
from thermostat.models import Sensor
from thermostat.models import Thermostat
from django.db.models.signals import post_save
import time
class Command(BaseCommand):
def handle(self, *args, **options):
post_save.connect(self.saved)
t = Thermostat.objects.get()
t.save()
time.sleep(30)
def saved(self, sender, **kwargs):
self.stdout.write(str(sender))
self.stdout.write(str(kwargs))
第一个 .save() 方法被识别,预期的文本被写入控制台的标准输出。./manage.py shell
但是,在浏览器中与应用程序交互或在CLI中手动保存实例时,它似乎没有收到任何信号。
我错过了什么?