如何根据函数的结果修改类的布尔字段的值?我正在尝试做的是一个函数,它 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'])
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消