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

如何根据函数的结果修改类的布尔字段的值?


我正在尝试做的是一个函数,它 ping (icmp) 一个位于“Cliente”类中的 ip,并根据结果更改类中的值“ping_status”。


我是 python 的新手,所以我没有太多的知识,我一直在尝试这样做 1 周,但我做不到。


models.py


class 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'))

但在此之后我不知道如何获取类值并修改它


慕尼黑5688855
浏览 141回答 1
1回答

守着星空守着你

您可以使用进程的退出代码来检查是否可以访问给定的主机。我们还可以使用.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'])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go