我正在编写DRF应用程序,但遇到了我无法理解的问题。我尝试在模型更改时发送请求。
这是我的模特:
class Sensors(models.Model):
CATEGORIES = [
('temperature', 'temperature'),
('humidity', 'humidity'),
]
id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
name = models.CharField(max_length=30, unique=True)
category = models.CharField(max_length=15, choices=CATEGORIES)
battery_level = models.IntegerField(blank=True, null=True)
notifications = models.BooleanField(default=True)
is_active = models.BooleanField(default=True)
frequency = models.IntegerField(default=300)
ip_address = models.GenericIPAddressField(blank=True, null=True)
class Meta:
verbose_name = "Sensor"
verbose_name_plural = "Sensors"
def __str__(self):
return str(self.id)
这是我的signal.py:
from django.db.models.signals import pre_save
from django.dispatch import receiver
from sensors.models import Sensors
import requests
@receiver(pre_save, sender=Sensors)
def do_something_if_changed(sender, instance, **kwargs):
try:
sensor = Sensors.objects.get(pk=instance.pk)
except Sensors.DoesNotExist:
pass # Object is new, so field hasn't technically changed, but you may want to do something else here.
else:
if not sensor.frequency == instance.frequency: # Field has changed
# do something
data_for_sensor = {
'id': sensor.id,
'frequency': instance.frequency
}
response = requests.post('http://192.168.1.21:8000/receive', data=data_for_sensor)
response.raise_for_status()
通常帖子不发送,我找不到原因
这也是我的apps.py:
from django.apps import AppConfig
from django.db.models.signals import pre_save
from django.dispatch import receiver
class SensorsConfig(AppConfig):
name = 'sensors'
def ready(self):
from .models import Sensors
Sensors = self.get_model('Sensors')
pre_save.connect(receiver, sender='sensors.Sensors')
和我的init.py:
default_app_config = 'sensors.apps.SensorsConfig'
答案 0 :(得分:0)
这是我在receivers.py
文件中连接接收器的标准做法
#apps.py
from django.apps import AppConfig
class SensorsConfig(AppConfig):
name = 'sensors'
def ready(self):
from . import receivers