Как обновить поле другой модели в функции pre_save? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть модель под названием SPL, которая получает новые объекты через фиксированный интервал. Каждый раз, когда он получает новый объект, функция «process_data» вызывается сигналом pre_save. В этой функции я пытаюсь обновить поле «leq_start» в другой модели «Индекс» на основе поля «время» объекта модели SPL. Код работает, потому что я не получаю никакой ошибки, но поле не обновляется. В чем дело? У меня есть некоторые другие функции, основанные на сигнале post_save, где он работает нормально ...

Я уже попробовал альтернативный вариант обновления, но он тоже не сработал.

Index.objects.filter(device_id=id_).update(leq_start=instance.time)
def process_data(sender, instance, **kwargs):
    id_ = instance.device_id
    num = instance.number
    # new code
    prevNum = Index.objects.get(device_id=id_).previous_nbr
    dP = num - prevNum
    if dP > 0:
        if prevNum == 0: 
            dT = 60
            b = Index.objects.get(device_id=id_)
            b.leq_start = instance.time
            b.save()
            instance.leq_60=instance.leq
            return
        else:
                ...

pre_save.connect(process_data, sender=SPL)
...