deviceinfo

This commit is contained in:
RobbieHan
2019-01-31 00:57:11 +08:00
parent ad74ed1802
commit 6765fa8b66
7 changed files with 677 additions and 10 deletions

View File

@@ -4,7 +4,7 @@
from django import forms
from .models import Code
from .models import Code, DeviceInfo
class CodeCreateForm(forms.ModelForm):
@@ -43,4 +43,33 @@ class CodeUpdateForm(CodeCreateForm):
raise forms.ValidationError(msg)
if matching_code.filter(value=value).exists():
msg = 'value{} 已经存在'.format(value)
raise forms.ValidationError(msg)
raise forms.ValidationError(msg)
class DeviceCreateForm(forms.ModelForm):
class Meta:
model = DeviceInfo
exclude = ['dev_connection']
error_messages = {
'hostname': {'required': '请填写设备地址'},
'buyDate': {'required': '请填写购买日期'},
'warrantyDate': {'required': '请填写到保日期'}
}
def clean(self):
cleaned_data = super(DeviceCreateForm, self).clean()
hostname = cleaned_data.get('hostname')
if DeviceInfo.objects.filter(hostname=hostname).count():
raise forms.ValidationError('设备地址:{}已存在'.format(hostname))
class DeviceUpdateForm(DeviceCreateForm):
def clean(self):
cleaned_data = self.cleaned_data
hostname = cleaned_data.get('hostname')
if self.instance:
matching_device = DeviceInfo.objects.exclude(pk=self.instance.pk)
if matching_device.filter(hostname=hostname).exists():
raise forms.ValidationError('设备地址:{}已存在'.format(hostname))

View File

@@ -53,11 +53,11 @@ class ConnectionAbstract(models.Model):
class DeviceAbstract(models.Model):
sys_hostname = models.CharField(max_length=50, blank=True, default='', verbose_name='主机名')
mac_address = models.CharField(max_length=50, blank=True, default='', verbose_name='MAC地址')
sn_number = models.CharField(max_length=50, blank=True, default='', verbose_name='SN号码')
os_type = models.CharField(max_length=50, blank=True, default='', verbose_name='系统类型')
device_type = models.CharField(max_length=50, blank=True, default='', verbose_name='设备类型')
sys_hostname = models.CharField(max_length=150, blank=True, default='', verbose_name='主机名')
mac_address = models.CharField(max_length=150, blank=True, default='', verbose_name='MAC地址')
sn_number = models.CharField(max_length=150, blank=True, default='', verbose_name='SN号码')
os_type = models.CharField(max_length=150, blank=True, default='', verbose_name='系统类型')
device_type = models.CharField(max_length=150, blank=True, default='', verbose_name='设备类型')
class Meta:
abstract = True
@@ -100,7 +100,7 @@ class DeviceInfo(AbstractMode, DeviceAbstract, TimeAbstract):
warrantyDate = models.DateField(default=datetime.now, verbose_name="到保日期")
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
changed_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL)
history = HistoricalRecords(excluded_fields=['add_time', 'modify_time'])
history = HistoricalRecords(excluded_fields=['add_time', 'modify_time', 'parent'])
class Meta:
verbose_name = '设备信息'

View File

@@ -27,4 +27,10 @@ urlpatterns = [
path('eam/cabinet/list/', views_eam.CabinetListView.as_view(), name='eam-cabinet-list'),
path('eam/cabinet/delete/', views_eam.CabinetDeleteView.as_view(), name='eam-cabinet-delete'),
path('eam/device/', views_eam.DeviceView.as_view(), name='eam-device'),
path('eam/device/create/', views_eam.DeviceCreateView.as_view(), name='eam-device-create'),
path('eam/device/update/', views_eam.DeviceUpdateView.as_view(), name='eam-device-update'),
path('eam/device/list/', views_eam.DeviceListView.as_view(), name='eam-device-list'),
path('eam/device/delete/', views_eam.DeviceDeleteView.as_view(), name='eam-device-delete'),
]

View File

@@ -1,9 +1,14 @@
from django.views.generic import TemplateView
from django.contrib.auth import get_user_model
from django.shortcuts import get_object_or_404
from system.mixin import LoginRequiredMixin
from custom import (BreadcrumbMixin, SandboxDeleteView,
SandboxListView, SandboxUpdateView, SandboxCreateView)
from .models import Cabinet
from .models import Cabinet, DeviceInfo, Code
from .forms import DeviceCreateForm, DeviceUpdateForm
User = get_user_model()
class CabinetView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
@@ -36,3 +41,80 @@ class CabinetListView(SandboxListView):
class CabinetDeleteView(SandboxDeleteView):
model = Cabinet
def get_device_public():
all_code = Code.objects.all()
all_cabinet = Cabinet.objects.all()
all_user = User.objects.all()
all_device = DeviceInfo.objects.all()
ret = {
'all_code': all_code,
'all_cabinet': all_cabinet,
'all_user': all_user,
'all_device': all_device,
}
return ret
class DeviceView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
template_name = 'cmdb/deviceinfo.html'
def get_context_data(self, **kwargs):
device_public = get_device_public()
kwargs.update(device_public)
return super().get_context_data(**kwargs)
class DeviceListView(SandboxListView):
model = DeviceInfo
fields = ['id', 'sys_hostname', 'sn_number', 'os_type', 'device_type', 'hostname', 'mac_address', 'leader']
def get_filters(self):
data = self.request.GET
filters = {}
if 'sys_hostname' in data and data['sys_hostname']:
filters['sys_hostname__icontains'] = data['sys_hostname']
if 'hostname' in data and data['hostname']:
filters['hostname__icontains'] = data['hostname']
if 'network_type' in data and data['network_type']:
filters['network_type'] = data['network_type']
if 'service_type' in data and data['service_type']:
filters['service_type'] = data['service_type']
if 'operation_type' in data and data['operation_type']:
filters['operation_type'] = data['operation_type']
return filters
def get_datatables_paginator(self, request):
context_data = super().get_datatables_paginator(request)
data = context_data['data']
for device in data:
user_id = device['leader']
device['leader'] = get_object_or_404(
User, pk=int(user_id)).name if user_id else ''
return context_data
class DeviceCreateView(SandboxCreateView):
model = DeviceInfo
form_class = DeviceCreateForm
def get_context_data(self, **kwargs):
public_data = get_device_public()
kwargs.update(public_data)
print(public_data)
return super().get_context_data(**kwargs)
class DeviceUpdateView(SandboxUpdateView):
model = DeviceInfo
form_class = DeviceUpdateForm
def get_context_data(self, **kwargs):
public_data = get_device_public()
kwargs.update(public_data)
return super().get_context_data(**kwargs)
class DeviceDeleteView(SandboxDeleteView):
model = DeviceInfo