我目前有一个可用于DSL连接的DSLAM管理站点。目前希望我想通过自动ping DSLAM IP地址来实现DSLAM状态更新。如果请求是好的,那么它将返回boolean = True并保存,否则boolean = False并保存。到目前为止,它不起作用,不知道从哪里开始。
from django.db import models
import os,sys
class DslamManager(models.Manager):
def dslam_status(self, ip_address):
if os.system('ping' + ip_address):
dslam_status = super(DslamManager, self).get(ip_address)
dslam_status = True
dslam_status.save()
else:
dslam_status = super(DslamManager, self)
dslam_status = False
dslam_status.save()
class Location(models.Model):
location_name = models.CharField(max_length=30)
island_name = models.CharField(max_length=30)
class Meta:
ordering = ['location_name']
def __unicode__(self):
return self.location_name
class Dslam(models.Model):
dslam_name = models.CharField(max_length=32)
ip_address = models.CharField(max_length=128)
location = models.ForeignKey(Location)
notes = models.TextField(blank=True)
dslam_status = models.BooleanField()
objects = DslamManager()
class Meta:
ordering = ['location', 'id']
def __unicode__(self):
return self.dslam_name
答案 0 :(得分:1)
我通过将其添加到ModelAdmin来修复此问题。它只需要一点时间来刷新,但这是因为它试图ping一个IP地址列表。
list_display = ('DSLAM_STATUS',)
def DSLAM_STATUS(self, obj):
if os.system('ping -w 1 -n 1 ' + obj.ip_address):
DSLAM_STATUS = False
else:
DSLAM_STATUS = True
return DSLAM_STATUS
DSLAM_STATUS.boolean = True
DSLAM_STATUS.allow_tags = True
这只在某些时候有效,但我相信ping ip_address的时间太快了。