Django无法接收预保存信号

时间:2020-06-11 17:46:03

标签: python django django-rest-framework request signals

我正在编写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'

1 个答案:

答案 0 :(得分:0)

这是我在receivers.py文件中连接接收器的标准做法

#apps.py
from django.apps import AppConfig


class SensorsConfig(AppConfig):    
    name = 'sensors'
    def ready(self):
         from . import receivers
相关问题