为了账号安全,请及时绑定邮箱和手机立即绑定

根据函数的结果更改类中字段的值

根据函数的结果更改类中字段的值

Go
慕尼黑5688855 2023-02-22 15:09:28
如何根据函数的结果修改类的布尔字段的值?我正在尝试做的是一个函数,它 ping (icmp) 一个位于“Cliente”类中的 ip,并根据结果更改类中的值“ping_status”。我是 python 的新手,所以我没有太多的知识,我一直在尝试这样做 1 周,但我做不到。models.pyclass Cliente(models.Model):razon_social = models.CharField('Razon Social', max_length=50)numero_cuenta = models.CharField('Numero de cuenta',max_length=6)nombre_contacto = models.CharField('Nombre del contacto', max_length=50)numero_del_contacto = models.CharField('Numero del contacto', max_length=10)email = models.EmailField('Correo Electronico', blank=True, null=True)tiene_as_propio = models.BooleanField('Tiene ASN priopio', default=False)ipv4 = models.GenericIPAddressField('IP', default='192.168.0.0')segmento = models.CharField('Segmento', max_length=15)asn= models.CharField(max_length=6, blank=True, null=True)created = models.DateTimeField('Creado el', auto_now_add=True ,blank=True, null=True)updated = models.DateTimeField('Actualizado el', auto_now_add=True, blank=True, null=True)topologia = models.FileField('Topologia', blank=True, null=True)ping_status = models.BooleanField('Ping', blank=True, null=True)def Meta(self):    verbose_name = 'cliente'    verbose_name_plural = 'clientes'def __str__(self):    return self.razon_social我的功能如下所示:def do_ping():    """Realice un nuevo ping y guárdelo en la base de datos."""    ip_clientes = Cliente.objects.values_list('ipv4')    for ip in ip_clientes:        ip = (list(ip))        for ping in ip:            ping = subprocess.call(['ping', '-n', '1', '-w',                                                   '2',ping],                                              stdout=open(os.devnull, 'w'),                                              stderr=open(os.devnull, 'w'))但在此之后我不知道如何获取类值并修改它
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您可以使用进程的退出代码来检查是否可以访问给定的主机。我们还可以使用.bulk_update(…)[Django-doc]来更新.ping_status对象的:

def do_ping():

    ip_clientes = list(Cliente.objects.all())

    for ip_client in ip_clientes:

        ping = subprocess.call(

            ['ping', '-n', '1', '-w', '2', str(ip_client.ipv4)],

            stdout=open(os.devnull, 'w'),

            stderr=open(os.devnull, 'w')

        )

        ip_client.ping_status = ping == 0

    Cliente.objects.bulk_update(ip_clientes, ['ping_status'])


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信