Commit b95c1dee authored by wangyong's avatar wangyong

alter asset add and detail

parent 42012d7b
...@@ -12,11 +12,13 @@ class AssetForm(forms.ModelForm): ...@@ -12,11 +12,13 @@ class AssetForm(forms.ModelForm):
fields = [ fields = [
"ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password", "ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password",
"idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos", "idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos",
"number", "status", "type", "env", "sn", "is_active", "comment" "number", "status", "type", "env", "sn", "is_active", "comment", "admin_user", "system_user"
] ]
widgets = { widgets = {
'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}), 'groups': forms.SelectMultiple(attrs={'class': 'select2-groups', 'data-placeholder': _('Select asset groups')}),
'system_user': forms.SelectMultiple(attrs={'class': 'select2-system-user', 'data-placeholder': _('Select asset system user')}),
# 'admin_user': forms.SelectMultiple(attrs={'class': 'select2-admin-user', 'data-placeholder': _('Select asset admin user')}),
} }
......
...@@ -7,18 +7,6 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -7,18 +7,6 @@ from django.utils.translation import ugettext_lazy as _
from common.utils import encrypt, decrypt from common.utils import encrypt, decrypt
class AssetGroup(models.Model):
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
comment = models.TextField(null=True, blank=True, verbose_name=_('Comment'))
def __unicode__(self):
return self.name
class Meta:
db_table = 'asset_group'
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -66,8 +54,8 @@ class IDC(models.Model): ...@@ -66,8 +54,8 @@ class IDC(models.Model):
class AssetExtend(models.Model): class AssetExtend(models.Model):
key = models.CharField(max_length=64, verbose_name=_('KEY')) key = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('KEY'))
value = models.CharField(max_length=64, verbose_name=_('VALUE')) value = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('VALUE'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by")) created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by"))
date_created = models.DateTimeField(auto_now=True, null=True, blank=True) date_created = models.DateTimeField(auto_now=True, null=True, blank=True)
comment = models.TextField(blank=True, verbose_name=_('Comment')) comment = models.TextField(blank=True, verbose_name=_('Comment'))
...@@ -272,14 +260,14 @@ class Asset(models.Model): ...@@ -272,14 +260,14 @@ class Asset(models.Model):
other_ip = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Other IP')) other_ip = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Other IP'))
remote_card_ip = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Remote card IP')) remote_card_ip = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Remote card IP'))
hostname = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Hostname')) hostname = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Hostname'))
port = models.IntegerField(null=True, blank=True, verbose_name=_('Port')) port = models.IntegerField(default=22, null=True, blank=True, verbose_name=_('Port'))
groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups')) groups = models.ManyToManyField(AssetGroup, blank=True, related_name='assets', verbose_name=_('Asset groups'))
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user')) username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user'))
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password")) password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password"))
admin_user = models.ForeignKey(AdminUser, null=True, related_name='assets', admin_user = models.ForeignKey(AdminUser, null=True, blank=True, related_name='assets',
on_delete=models.SET_NULL, verbose_name=_("Admin user")) on_delete=models.SET_NULL, verbose_name=_("Admin user"))
system_user = models.ManyToManyField(SystemUser, blank=True, related_name='assets', verbose_name=_("System User")) system_user = models.ManyToManyField(SystemUser, blank=True, related_name='assets', verbose_name=_("System User"))
idc = models.ForeignKey(IDC, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC')) idc = models.ForeignKey(IDC, null=True, blank=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC'))
mac_address = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address")) mac_address = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand')) brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand'))
cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU')) cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU'))
...@@ -288,15 +276,15 @@ class Asset(models.Model): ...@@ -288,15 +276,15 @@ class Asset(models.Model):
os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS')) os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS'))
cabinet_no = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Cabinet number')) cabinet_no = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Cabinet number'))
cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position')) cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position'))
number = models.CharField(max_length=32, blank=True, verbose_name=_('Asset number')) number = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Asset number'))
status = models.ForeignKey(AssetExtend, null=True, blank=True, status = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_status_extend",
related_name="asset_status_extend", verbose_name=_('Asset status')) verbose_name=_('Asset status'))
type = models.ForeignKey(AssetExtend, null=True, blank=True, type = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_type_extend",
related_name="asset_type_extend", verbose_name=_('Asset type')) verbose_name=_('Asset type'))
env = models.ForeignKey(AssetExtend, null=True, blank=True, env = models.ForeignKey(AssetExtend, null=True, blank=True, related_name="asset_env_extend",
related_name="asset_env_extend", verbose_name=_('Asset environment')) verbose_name=_('Asset environment'))
sn = models.CharField(max_length=128, blank=True, verbose_name=_('Serial number')) sn = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Serial number'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
is_active = models.BooleanField(default=True, verbose_name=_('Is active')) is_active = models.BooleanField(default=True, verbose_name=_('Is active'))
date_created = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Date added')) date_created = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Date added'))
comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment')) comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment'))
...@@ -332,15 +320,15 @@ class Asset(models.Model): ...@@ -332,15 +320,15 @@ class Asset(models.Model):
class Label(models.Model): class Label(models.Model):
key = models.CharField(max_length=64, verbose_name=_('KEY')) key = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('KEY'))
value = models.CharField(max_length=64, verbose_name=_('VALUE')) value = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('VALUE'))
asset = models.ForeignKey(Asset, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('Asset')) asset = models.ForeignKey(Asset, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('Asset'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by")) created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by"))
date_created = models.DateTimeField(auto_now=True, null=True) date_created = models.DateTimeField(auto_now=True, null=True)
comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment'))
def __unicode__(self): def __unicode__(self):
return self.name return self.key
class Meta: class Meta:
db_table = 'label' db_table = 'label'
...@@ -348,4 +336,4 @@ class Label(models.Model): ...@@ -348,4 +336,4 @@ class Label(models.Model):
def generate_fake(): def generate_fake():
for cls in (Asset, AssetGroup, IDC): for cls in (Asset, AssetGroup, IDC):
cls.generate_fake() cls.generate_fake()
\ No newline at end of file
...@@ -27,67 +27,68 @@ ...@@ -27,67 +27,68 @@
<div class="ibox-content"> <div class="ibox-content">
<div class="panel blank-panel"> <div class="panel blank-panel">
<div class="panel-body"> <div class="tab-content">
<div class="tab-content"> <form id="assetForm" method="post" class="form-horizontal">
<div id="tab-1" class="ibox float-e-margins tab-pane active"></div> {% csrf_token %}
<form id="assetForm" method="post" class="form-horizontal"> <h3 class="widget-head-color-box">基本信息</h3>
{% csrf_token %}
<h3 class="widget-head-color-box">基本信息</h3>
{{ form.hostname|bootstrap_horizontal }} {{ form.hostname|bootstrap_horizontal }}
{{ form.ip|bootstrap_horizontal }} {{ form.ip|bootstrap_horizontal }}
{{ form.port|bootstrap_horizontal }} {{ form.port|bootstrap_horizontal }}
{{ form.type|bootstrap_horizontal }} {{ form.type|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }} {{ form.comment|bootstrap_horizontal }}
<div class="hr-line-dashed"></div>
<h3>关联资产用户</h3>
<div class="form-group">
<label for="j_group" class="col-sm-2 control-label">管理用户</label>
<div class="col-sm-9">
<div class="radio i-checks">
<label><input type="radio" checked="checked" id="id_use_default_auth" name="use_default_auth"><span>使用预定义管理用户</span></label>
<label><input type="radio" id="id_use_default_auth" name="use_default_auth"><span>自定义</span></label>
</div>
</div>
</div>
<div class="form-group" id="id_manager_user"> <div class="hr-line-dashed"></div>
<div class="col-sm-offset-2 col-sm-9"> <h3>关联资产用户</h3>
<input type="text" placeholder="请选择管理用户" name="manager_user" class="form-control"> <div class="form-group">
</div> <label for="j_group" class="col-sm-2 control-label">管理用户</label>
<div class="col-sm-9">
<div class="radio i-checks">
<label><input type="radio" checked="checked" id="id_use_default_auth" name="use_default_auth"><span>使用预定义管理用户</span></label>
<label><input type="radio" id="id_use_default_auth" name="use_default_auth"><span>自定义</span></label>
</div> </div>
<p class="col-sm-offset-2">Tips: 管理用户是服务器存在的root或拥有sudo的用户,用来推送系统用户</p> </div>
</div>
<div class="form-group"> {{ form.admin_user|bootstrap_horizontal }}
<label for="system_user" class="col-sm-2 control-label">系统用户</label> <p class="col-sm-offset-2">Tips: 管理用户是服务器存在的root或拥有sudo的用户,用来推送系统用户</p>
<div class="col-sm-9">
<input type="text" placeholder="" name="system_user" class="form-control">
</div>
</div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<h3>所属</h3> {{ form.system_user|bootstrap_horizontal }}
{{ form.idc|bootstrap_horizontal }}
{{ form.groups|bootstrap_horizontal }} <div class="hr-line-dashed"></div>
<h3>所属</h3>
{{ form.idc|bootstrap_horizontal }}
<div class="hr-line-dashed"></div> {{ form.groups|bootstrap_horizontal }}
<h3>标签</h3>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <h3>标签</h3>
<div class="col-sm-4 col-sm-offset-5"> <div class="form-group" id="id_label">
<button class="btn btn-white" type="reset"> 重置 </button> <label class="col-sm-2 control-label">Label</label>
<button class="btn btn-primary" type="submit"> 提交 </button> <div class="col-sm-4">
</div> <input type="text" placeholder="Key" name="key" class="form-control">
</div> </div>
</form> <div class="col-sm-5">
<input type="text" placeholder="Value" name="value" class="form-control">
</div>
</div>
<div class="col-sm-offset-2">
<i class="fa fa-plus-circle"></i> <span class="nav-label">添加</span><span class="fa arrow"></span>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-5">
<button class="btn btn-white" type="reset"> 重置 </button>
<button class="btn btn-primary" type="submit"> 提交 </button>
</div>
</div> </div>
</div> </form>
</div> </div>
</div> </div>
</div> </div>
...@@ -100,7 +101,9 @@ ...@@ -100,7 +101,9 @@
{% block custom_foot_js %} {% block custom_foot_js %}
<script> <script>
$(document).ready(function () { $(document).ready(function () {
$('.select2').select2(); $('.select2-groups').select2();
$('.select2-admin-user').select2();
$('.select2-system-user').select2();
}) })
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
<td class="text-center" name="id" value="{{ asset.id }}" data-editable='false'> <td class="text-center" name="id" value="{{ asset.id }}" data-editable='false'>
<input name="id" value="{{ asset.id }}" type="checkbox" class="i-checks"> <input name="id" value="{{ asset.id }}" type="checkbox" class="i-checks">
</td> </td>
<td class="text-center"> {{ asset.hostname }} </td> <td class="text-center"> <a href="{% url 'assets:asset-detail' pk=asset.id %}">{{ asset.hostname }}</a></td>
<td class="text-center"> {{ asset.ip }} </td> <td class="text-center"> {{ asset.ip }} </td>
<td class="text-center">{{ asset.system_type }}</td> <td class="text-center">{{ asset.system_type }}</td>
<td class="text-center"> {{ asset.cpu }} | {{ asset.memory }} | {{ asset.disk }}</td> <td class="text-center"> {{ asset.cpu }} | {{ asset.memory }} | {{ asset.disk }}</td>
......
...@@ -10,22 +10,31 @@ from django.urls import reverse_lazy ...@@ -10,22 +10,31 @@ from django.urls import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.detail import DetailView, SingleObjectMixin
from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser, Label
from .forms import AssetForm, AssetGroupForm, IDCForm, AdminUserForm, SystemUserForm from .forms import AssetForm, AssetGroupForm, IDCForm, AdminUserForm, SystemUserForm
from .hands import AdminUserRequiredMixin from .hands import AdminUserRequiredMixin
class AssetCreateView(CreateView): class AssetCreateView(AdminUserRequiredMixin, CreateView):
model = Asset model = Asset
form_class = AssetForm form_class = AssetForm
template_name = 'assets/asset_create.html' template_name = 'assets/asset_create.html'
success_url = reverse_lazy('assets:asset-list') success_url = reverse_lazy('assets:asset-list')
def form_invalid(self, form): def form_valid(self, form):
asset = form.save(commit=False) asset = form.save(commit=False)
asset.is_active = 1 key = self.request.POST.get('key', '')
value = self.request.POST.get('value', '')
asset.save() asset.save()
return super(AssetCreateView, self).form_invalid(form) Label.objects.create(key=key, value=value, asset=asset)
return super(AssetCreateView, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(AssetCreateView, self).get_context_data(**kwargs)
context.update({'admin_users': AdminUser.objects.all()})
assert isinstance(context, object)
print(context)
return context
class AssetUpdateView(UpdateView): class AssetUpdateView(UpdateView):
......
/*
@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"); @import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700");
@import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700"); @import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700");
*/
/* /*
* *
* INSPINIA - Responsive Admin Theme * INSPINIA - Responsive Admin Theme
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment