как получить доступ к полю, используя сигналы Django - PullRequest
0 голосов
/ 10 сентября 2018

Я хотел бы проверить значение поля (lightStatusA), когда новая запись сохраняется в моей базе данных Django. Я чувствую, что я читаю документы 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 голосов
/ 10 сентября 2018

Ааа, хорошо, понял:

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

Это печатает поле, с которым мне нужно выполнить некоторую логику.

0 голосов
/ 10 сентября 2018

Функция check_light_status может принимать параметр instance.

Из документов :

экземпляр
Фактический экземпляр сохраняется.

Обновление : Вы сказали это:

экземпляр возвращает автора сообщения.

Я собираюсь использовать свои дедукционные способности, чтобы догадаться, что вы пытались print(instance) и видели автора.Посмотрите на вашу реализацию __str__.

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

Я бы сказал, что вы немного саботировали себя;)

...