如何使用Django信号访问字段

时间:2018-09-10 20:06:28

标签: python django django-signals

当新记录保存到Django数据库中时,我想检查字段(lightStatusA)的值。我觉得我已经阅读了10遍文档,但仍然不知道如何获得此文档。这是我当前的models.py代码:

from django.db import models
from accounts.models import Customer
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db.models.signals import post_save

class Data(models.Model):
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,)
    tempData= models.CharField(max_length=50,blank=True,)
    humidData= models.CharField(max_length=50,blank=True,)
    lightStatusA= models.BooleanField(default=True,) 
    dateTime = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.author)

def check_light_status(sender, **kwargs):
    if kwargs['created']: #make sure its a new record
        #need logic to grab instance.lightStatusA and check it's value

post_save.connect(check_light_status, sender = Data)

是否可以通过某种方式将此值作为信号的参数传递?

2 个答案:

答案 0 :(得分:1)

check_light_status函数可以接受instance参数。

来自the docs

  

实例
  实际实例正在保存。

更新:您说的是

  

instance返回帖子的作者。

我将使用推论的力量来猜测您尝试了print(instance)并看到了作者。查看您的__str__实现。

def __str__(self):
    return str(self.author)

我会说你在那儿破坏了自己;)

答案 1 :(得分:0)

好吧:

def check_light_status(sender, instance, **kwargs):
    if kwargs['created']: #make sure its a new record
        print(instance.lightStatusA)

这将打印我需要对其进行一些逻辑处理的字段。