我想通过Django模型Device
将网络设备数据存储到我的数据库中
工作流
问题:
仅当配置了主机时才允许调用函数create_devices()
,但if Host.objects.values():
不起作用
create_devices()
李>型号:
class Host(models.Model):
hostname = models.CharField(default="noads", max_length=6)
ipv4_address = models.GenericIPAddressField('IPv4')
ipv4_subnet = models.GenericIPAddressField('IPv4')
gateway = models.GenericIPAddressField('IPv4')
class Device(models.Model):
hostname = models.CharField(max_length=64)
mac_address = models.CharField(max_length=64)
ipv4_address = models.GenericIPAddressField('IPv4')
我的观点:
from webapp.models import Host, Device
from django.views import View
from django.views.generic.detail import DetailView
import multiprocessing.dummy
import multiprocessing
def create_devices():
"""
Creates DB entry of devices if they dont already exist
:return: List of mulitple devices stored in objects
:rtype: list ["Device", "Device", ...]
"""
available_devices = get_available_devices_in_list()
arp_table_of_all_hosts = get_arp_table_linux()
dev_list = []
for deviceip in available_devices:
#If device already exists in DB continue
if arp_table_of_all_hosts.get(deviceip):
if arp_table_of_all_hosts[deviceip] in Device.objects.filter(mac_address = arp_table_of_all_hosts[deviceip]):
continue
else:
devmac = arp_table_of_all_hosts[deviceip]
devname = "unknown" #socket.gethostbyaddr(deviceip)
dev = Device(hostname=devname, mac_address=devmac, ipv4_address=deviceip)
dev.save()
dev_list.append(dev)
return dev_list
class DeviceGetAll(DetailView):
if Host.objects.values():
create_devices()
model = Device
pass
您的视图
DeviceGetAll
写得不正确。if
条件需要放在视图的某些方法中,而不是放在类定义中我不明白您到底想做什么,所以我不知道您需要在哪个方法中添加代码,但是您可以查看
DetailView
的基本代码,看看其中的一些方法是否对您有用。 我甚至不知道细节视图是否是放置创建相同模型实例的代码的最佳位置;也许它也可以在主机创建之后进行但是如果您想使用
DetailView
,您可以从SingleObjectMixin
(它是DetailView
的父级之一)重写方法get_object()
,您的代码可以如下所示:另外,您可能想在if条件中使用^{} 方法,而不是
.values()
相关问题 更多 >
编程相关推荐