【问题标题】:Save method not working in Django as expected保存方法无法按预期在 Django 中工作
【发布时间】:2021-07-10 12:01:30
【问题描述】:

目的: 我正在尝试设置一个带有基本 UI 的小型本地网络监视器,它可以 ping 数据库中登记的所有设备并更新状态。

问题: save() 方法没有更新数据库。

我的模特:

class Device(models.Model):
    dev_name = models.CharField(max_length=100)
    dev_ip = models.CharField(max_length=16)
    
    def __str__(self):
        return self.dev_name
    
    def get_absolute_url(self):
        return reverse('device-detail', kwargs={'pk': self.pk})

我写的 ping 设备和更新 DB 的函数:

import platform
import subprocess
from netmon.models import Device
from background_task import background

@background(schedule=60)
def start_monitor():
    devices = Device.objects.all()
    print(">>>>>>>>>>> In Start_monitor <<<<<<<<<<<")
    for device in devices:
        if (ping(device.dev_ip)):
            device.status = "Alive"
        else:
            device.status = "Dead"
        device.save(update_fields=["dev_status"])

我是 Django 初学者,如果您需要更多详细信息,请告诉我。感谢所有答案。

谢谢

【问题讨论】:

    标签: python-3.x django django-models


    【解决方案1】:

    基于您更新dev_status字段的事实,您需要将状态分配给device.dev_status,而不是device.status

    @background(schedule=60)
    def start_monitor():
        devices = Device.objects.all()
        print('>>>>>>>>>>> In Start_monitor <<<<<<<<<<<')
        for device in devices:
            if (ping(device.dev_ip)):
                device.dev_status = 'Alive'  # &leftarrow; update dev_status
            else:
                device.dev_status = 'Dead'  # &leftarrow; update dev_status
            device.save(update_fields=['dev_status'])

    【讨论】:

    • 刚刚注意到,我的错。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多