mirror of https://github.com/jumpserver/jumpserver
[Delete] 删除资产tag
parent
a57dac0706
commit
10eb13920b
|
@ -12,7 +12,7 @@ from django.shortcuts import get_object_or_404
|
||||||
from common.mixins import IDInFilterMixin
|
from common.mixins import IDInFilterMixin
|
||||||
from common.utils import get_object_or_none, signer
|
from common.utils import get_object_or_none, signer
|
||||||
from .hands import IsSuperUser, IsAppUser
|
from .hands import IsSuperUser, IsAppUser
|
||||||
from .models import AssetGroup, Asset, IDC, SystemUser, AdminUser, Tag
|
from .models import AssetGroup, Asset, IDC, SystemUser, AdminUser
|
||||||
from . import serializers
|
from . import serializers
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,14 +25,11 @@ class AssetViewSet(IDInFilterMixin, BulkModelViewSet):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = super(AssetViewSet, self).get_queryset()
|
queryset = super(AssetViewSet, self).get_queryset()
|
||||||
idc_id = self.request.query_params.get('idc_id', '')
|
idc_id = self.request.query_params.get('idc_id', '')
|
||||||
tags_id = self.request.query_params.get('tag_id', '')
|
|
||||||
system_users_id = self.request.query_params.get('system_user_id', '')
|
system_users_id = self.request.query_params.get('system_user_id', '')
|
||||||
asset_group_id = self.request.query_params.get('asset_group_id', '')
|
asset_group_id = self.request.query_params.get('asset_group_id', '')
|
||||||
admin_user_id = self.request.query_params.get('admin_user_id', '')
|
admin_user_id = self.request.query_params.get('admin_user_id', '')
|
||||||
if idc_id:
|
if idc_id:
|
||||||
queryset = queryset.filter(idc__id=idc_id)
|
queryset = queryset.filter(idc__id=idc_id)
|
||||||
if tags_id:
|
|
||||||
queryset = queryset.filter(tags__id=tags_id)
|
|
||||||
if system_users_id:
|
if system_users_id:
|
||||||
queryset = queryset.filter(system_users__id=system_users_id)
|
queryset = queryset.filter(system_users__id=system_users_id)
|
||||||
if admin_user_id:
|
if admin_user_id:
|
||||||
|
@ -147,16 +144,3 @@ class SystemUserAuthInfoApi(generics.RetrieveAPIView):
|
||||||
}
|
}
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
|
||||||
|
|
||||||
class TagViewSet(IDInFilterMixin, BulkModelViewSet):
|
|
||||||
queryset = Tag.objects.all()
|
|
||||||
serializer_class = serializers.TagSerializer
|
|
||||||
permission_classes = (IsSuperUser,)
|
|
||||||
|
|
||||||
|
|
||||||
## update the IDC, and add or delete the assets to the IDC
|
|
||||||
class TagUpdateAssetsApi(generics.RetrieveUpdateAPIView):
|
|
||||||
queryset = Tag.objects.all()
|
|
||||||
serializer_class = serializers.TagUpdateAssetsSerializer
|
|
||||||
permission_classes = (IsSuperUser,)
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import IDC, Asset, AssetGroup, AdminUser, SystemUser, Tag
|
from .models import IDC, Asset, AssetGroup, AdminUser, SystemUser
|
||||||
from common.utils import validate_ssh_private_key, ssh_pubkey_gen, ssh_key_gen, get_logger
|
from common.utils import validate_ssh_private_key, ssh_pubkey_gen, ssh_key_gen, get_logger
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,20 +10,6 @@ logger = get_logger(__file__)
|
||||||
|
|
||||||
|
|
||||||
class AssetCreateForm(forms.ModelForm):
|
class AssetCreateForm(forms.ModelForm):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
instance = kwargs.get('instance', None)
|
|
||||||
if instance:
|
|
||||||
initial = kwargs.get('initial', {})
|
|
||||||
initial['tags'] = [t.pk for t in kwargs['instance'].tags.all()]
|
|
||||||
super(AssetCreateForm, self).__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
def _save_m2m(self):
|
|
||||||
super(AssetCreateForm, self)._save_m2m()
|
|
||||||
tags = self.cleaned_data['tags']
|
|
||||||
self.instance.tags.clear()
|
|
||||||
self.instance.tags.add(*tuple(tags))
|
|
||||||
|
|
||||||
def clean_admin_user(self):
|
def clean_admin_user(self):
|
||||||
if not self.cleaned_data['admin_user']:
|
if not self.cleaned_data['admin_user']:
|
||||||
raise forms.ValidationError(_('Select admin user'))
|
raise forms.ValidationError(_('Select admin user'))
|
||||||
|
@ -31,16 +17,13 @@ class AssetCreateForm(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all())
|
|
||||||
fields = [
|
fields = [
|
||||||
'hostname', 'ip', 'public_ip', 'port', 'type', 'comment', 'admin_user',
|
'hostname', 'ip', 'public_ip', 'port', 'type', 'comment', 'admin_user',
|
||||||
'idc', 'groups', 'status', 'env', 'tags', 'is_active'
|
'idc', 'groups', 'status', 'env', 'is_active'
|
||||||
]
|
]
|
||||||
widgets = {
|
widgets = {
|
||||||
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
||||||
'data-placeholder': _('Select asset groups')}),
|
'data-placeholder': _('Select asset groups')}),
|
||||||
'tags': forms.SelectMultiple(attrs={'class': 'select2',
|
|
||||||
'data-placeholder': _('Select asset tags')}),
|
|
||||||
'admin_user': forms.Select(attrs={'class': 'select2', 'data-placeholder': _('Select asset admin user')}),
|
'admin_user': forms.Select(attrs={'class': 'select2', 'data-placeholder': _('Select asset admin user')}),
|
||||||
}
|
}
|
||||||
help_texts = {
|
help_texts = {
|
||||||
|
@ -48,24 +31,20 @@ class AssetCreateForm(forms.ModelForm):
|
||||||
'ip': '* required',
|
'ip': '* required',
|
||||||
'system_users': _('System user will be granted for user to login assets (using ansible create automatic)'),
|
'system_users': _('System user will be granted for user to login assets (using ansible create automatic)'),
|
||||||
'admin_user': _('Admin user should be exist on asset already, And have sudo ALL permission'),
|
'admin_user': _('Admin user should be exist on asset already, And have sudo ALL permission'),
|
||||||
'tags': '最多5个标签,单个标签最长8个汉字,按回车确认'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class AssetUpdateForm(AssetCreateForm):
|
class AssetUpdateForm(AssetCreateForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all())
|
|
||||||
fields = [
|
fields = [
|
||||||
'hostname', 'ip', 'port', 'groups', 'admin_user', 'idc', 'is_active',
|
'hostname', 'ip', 'port', 'groups', 'admin_user', 'idc', 'is_active',
|
||||||
'type', 'env', 'status', 'public_ip', 'remote_card_ip', 'cabinet_no',
|
'type', 'env', 'status', 'public_ip', 'remote_card_ip', 'cabinet_no',
|
||||||
'cabinet_pos', 'number', 'comment', 'tags'
|
'cabinet_pos', 'number', 'comment'
|
||||||
]
|
]
|
||||||
widgets = {
|
widgets = {
|
||||||
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
||||||
'data-placeholder': _('Select asset groups')}),
|
'data-placeholder': _('Select asset groups')}),
|
||||||
'tags': forms.SelectMultiple(attrs={'class': 'select2',
|
|
||||||
'data-placeholder': _('Select asset tags')}),
|
|
||||||
'admin_user': forms.Select(attrs={'class': 'select2', 'data-placeholder': _('Select asset admin user')}),
|
'admin_user': forms.Select(attrs={'class': 'select2', 'data-placeholder': _('Select asset admin user')}),
|
||||||
}
|
}
|
||||||
help_texts = {
|
help_texts = {
|
||||||
|
@ -73,13 +52,13 @@ class AssetUpdateForm(AssetCreateForm):
|
||||||
'ip': '* required',
|
'ip': '* required',
|
||||||
'system_users': _('System user will be granted for user to login assets (using ansible create automatic)'),
|
'system_users': _('System user will be granted for user to login assets (using ansible create automatic)'),
|
||||||
'admin_user': _('Admin user should be exist on asset already, And have sudo ALL permission'),
|
'admin_user': _('Admin user should be exist on asset already, And have sudo ALL permission'),
|
||||||
'tags': '最多5个标签,单个标签最长8个汉字,按回车确认'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class AssetGroupForm(forms.ModelForm):
|
class AssetGroupForm(forms.ModelForm):
|
||||||
# See AdminUserForm comment same it
|
# See AdminUserForm comment same it
|
||||||
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
|
assets = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=Asset.objects.all(),
|
||||||
label=_('Asset'),
|
label=_('Asset'),
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.SelectMultiple(
|
widget=forms.SelectMultiple(
|
||||||
|
@ -297,39 +276,5 @@ class SystemUserForm(forms.ModelForm):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class AssetTagForm(forms.ModelForm):
|
|
||||||
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
|
|
||||||
label=_('Asset'),
|
|
||||||
required=False,
|
|
||||||
widget=forms.SelectMultiple(
|
|
||||||
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
if kwargs.get('instance', None):
|
|
||||||
initial = kwargs.get('initial', {})
|
|
||||||
initial['assets'] = kwargs['instance'].asset_set.all()
|
|
||||||
super(AssetTagForm, self).__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
def _save_m2m(self):
|
|
||||||
assets = self.cleaned_data['assets']
|
|
||||||
self.instance.assets.clear()
|
|
||||||
self.instance.assets.add(*tuple(assets))
|
|
||||||
super(AssetTagForm, self)._save_m2m()
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tag
|
|
||||||
fields = [
|
|
||||||
"name",
|
|
||||||
]
|
|
||||||
widgets = {
|
|
||||||
'name': forms.TextInput(attrs={}),
|
|
||||||
|
|
||||||
}
|
|
||||||
help_texts = {
|
|
||||||
'name': '* required',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class FileForm(forms.Form):
|
class FileForm(forms.Form):
|
||||||
file = forms.FileField()
|
file = forms.FileField()
|
||||||
|
|
|
@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from . import IDC, AssetGroup, AdminUser, SystemUser
|
from . import IDC, AssetGroup, AdminUser, SystemUser
|
||||||
|
|
||||||
__all__ = ['Asset', 'Tag']
|
__all__ = ['Asset']
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +83,6 @@ class Asset(models.Model):
|
||||||
created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
|
created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
|
||||||
date_created = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name=_('Date added'))
|
date_created = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name=_('Date added'))
|
||||||
comment = models.TextField(max_length=128, default='', blank=True, verbose_name=_('Comment'))
|
comment = models.TextField(max_length=128, default='', blank=True, verbose_name=_('Comment'))
|
||||||
tags = models.ManyToManyField('Tag', related_name='assets', blank=True, verbose_name=_('Tags'))
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%s <%s: %s>' % (self.hostname, self.ip, self.port)
|
return '%s <%s: %s>' % (self.hostname, self.ip, self.port)
|
||||||
|
@ -146,16 +145,3 @@ class Asset(models.Model):
|
||||||
print('Error continue')
|
print('Error continue')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
class Tag(models.Model):
|
|
||||||
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
|
|
||||||
created_time = models.DateTimeField(auto_now_add=True, verbose_name=_('Create time'))
|
|
||||||
created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
__str__ = __unicode__
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = 'tag'
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import viewsets, serializers, generics
|
from rest_framework import viewsets, serializers, generics
|
||||||
from .models import AssetGroup, Asset, IDC, AdminUser, SystemUser, Tag
|
from .models import AssetGroup, Asset, IDC, AdminUser, SystemUser
|
||||||
from common.mixins import IDInFilterMixin
|
from common.mixins import IDInFilterMixin
|
||||||
from rest_framework_bulk import BulkListSerializer, BulkSerializerMixin
|
from rest_framework_bulk import BulkListSerializer, BulkSerializerMixin
|
||||||
|
|
||||||
|
@ -61,20 +61,6 @@ class IDCUpdateAssetsSerializer(serializers.ModelSerializer):
|
||||||
fields = ['id', 'assets']
|
fields = ['id', 'assets']
|
||||||
|
|
||||||
|
|
||||||
class TagSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
|
||||||
assets_amount = serializers.SerializerMethodField()
|
|
||||||
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tag
|
|
||||||
list_serializer_class = BulkListSerializer
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_assets_amount(obj):
|
|
||||||
return obj.assets.count()
|
|
||||||
|
|
||||||
|
|
||||||
class AdminUserSerializer(serializers.ModelSerializer):
|
class AdminUserSerializer(serializers.ModelSerializer):
|
||||||
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
||||||
|
|
||||||
|
@ -189,10 +175,3 @@ class IDCSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
||||||
fields.append('assets_amount')
|
fields.append('assets_amount')
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
|
|
||||||
class TagUpdateAssetsSerializer(serializers.ModelSerializer):
|
|
||||||
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tag
|
|
||||||
fields = ['id', 'assets']
|
|
|
@ -61,22 +61,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-sm-2 col-lg-2 " for="id_tags">标签集合</label>
|
|
||||||
<div class=" col-sm-9 col-lg-9 ">
|
|
||||||
<select multiple="multiple" class="select2 form-control" data-placeholder="Select asset tags" id="tags" name="tags">
|
|
||||||
{% for tag in tags %}
|
|
||||||
<option value="{{ tag.id }}">{{ tag.name }}</option>
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
<p class="help-block">
|
|
||||||
最多5个标签,单个标签最长8个汉字,按回车确认
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block modal_confirm_id %}btn_asset_bulk_update{% endblock %}
|
{% block modal_confirm_id %}btn_asset_bulk_update{% endblock %}
|
|
@ -29,7 +29,6 @@
|
||||||
|
|
||||||
<div class="hr-line-dashed"></div>
|
<div class="hr-line-dashed"></div>
|
||||||
<h3>{% trans 'Other' %}</h3>
|
<h3>{% trans 'Other' %}</h3>
|
||||||
{{ form.tags|bootstrap_horizontal }}
|
|
||||||
{{ form.comment|bootstrap_horizontal }}
|
{{ form.comment|bootstrap_horizontal }}
|
||||||
{{ form.is_active|bootstrap_horizontal }}
|
{{ form.is_active|bootstrap_horizontal }}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ router.register(r'v1/assets', api.AssetViewSet, 'asset')
|
||||||
router.register(r'v1/idc', api.IDCViewSet, 'idc')
|
router.register(r'v1/idc', api.IDCViewSet, 'idc')
|
||||||
router.register(r'v1/admin-user', api.AdminUserViewSet, 'admin-user')
|
router.register(r'v1/admin-user', api.AdminUserViewSet, 'admin-user')
|
||||||
router.register(r'v1/system-user', api.SystemUserViewSet, 'system-user')
|
router.register(r'v1/system-user', api.SystemUserViewSet, 'system-user')
|
||||||
router.register(r'v1/tags', api.TagViewSet, 'asset-tag')
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^v1/assets_bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
|
url(r'^v1/assets_bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
|
||||||
|
@ -45,8 +44,6 @@ urlpatterns = [
|
||||||
url(r'^v1/idc/(?P<pk>\d+)/assets/$',
|
url(r'^v1/idc/(?P<pk>\d+)/assets/$',
|
||||||
api.IDCupdateAssetsApi.as_view(), name='idc-update-assets'),
|
api.IDCupdateAssetsApi.as_view(), name='idc-update-assets'),
|
||||||
|
|
||||||
url(r'v1/tag/(?P<pk>\d+)/assets/$',
|
|
||||||
api.TagUpdateAssetsApi.as_view(), name='tag-update-assets'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
|
|
@ -24,13 +24,6 @@ urlpatterns = [
|
||||||
url(r'^asset-group/(?P<pk>[0-9]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'),
|
url(r'^asset-group/(?P<pk>[0-9]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'),
|
||||||
url(r'^asset-group/(?P<pk>[0-9]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'),
|
url(r'^asset-group/(?P<pk>[0-9]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'),
|
||||||
|
|
||||||
url(r'^tags/$', views.TagsListView.as_view(), name='asset-tag-list'),
|
|
||||||
url(r'^asset-by-tag/(?P<tag_id>[0-9]+)/$', views.TagView.as_view(), name='asset-tags'),
|
|
||||||
url(r'^tags/create/$', views.AssetTagCreateView.as_view(), name='asset-tag-create'),
|
|
||||||
url(r'^asset-tag/(?P<pk>[0-9]+)/$', views.AssetTagDetailView.as_view(), name='asset-tag-detail'),
|
|
||||||
url(r'^asset-tag/(?P<pk>[0-9]+)/update/$', views.AssetTagUpdateView.as_view(), name='asset-tag-update'),
|
|
||||||
url(r'^asset-tag/(?P<pk>[0-9]+)/delete/$', views.AssetTagDeleteView.as_view(), name='asset-tag-delete'),
|
|
||||||
|
|
||||||
# Resource idc url
|
# Resource idc url
|
||||||
url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'),
|
url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'),
|
||||||
url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'),
|
url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'),
|
||||||
|
|
|
@ -1,40 +1,3 @@
|
||||||
# ~*~ coding: utf-8 ~*~
|
# ~*~ coding: utf-8 ~*~
|
||||||
#
|
#
|
||||||
from rest_framework import serializers
|
|
||||||
from models import Tag
|
|
||||||
from django.views.generic.edit import CreateView
|
|
||||||
|
|
||||||
|
|
||||||
class CreateAssetTagsMiXin(CreateView):
|
|
||||||
def get_form_kwargs(self):
|
|
||||||
tags_list = self.request.POST.getlist('tags')
|
|
||||||
kwargs = {
|
|
||||||
'initial': self.get_initial(),
|
|
||||||
'prefix': self.get_prefix(),
|
|
||||||
}
|
|
||||||
if self.request.method in ('POST', 'PUT'):
|
|
||||||
post_data = self.request.POST.copy()
|
|
||||||
if post_data.has_key('tags'):
|
|
||||||
post_data.pop('tags')
|
|
||||||
for t in tags_list:
|
|
||||||
try:
|
|
||||||
oTag = Tag.objects.get(pk=int(t))
|
|
||||||
except (Tag.DoesNotExist, UnicodeEncodeError):
|
|
||||||
oTag = Tag(name=t, created_by=self.request.user.username or 'Admin')
|
|
||||||
oTag.save()
|
|
||||||
post_data.update({'tags':oTag.pk})
|
|
||||||
else:
|
|
||||||
post_data.update({'tags':int(t)})
|
|
||||||
kwargs.update({
|
|
||||||
'data': post_data,
|
|
||||||
'files': self.request.FILES,
|
|
||||||
})
|
|
||||||
return kwargs
|
|
||||||
|
|
||||||
|
|
||||||
class UpdateAssetTagsMiXin(CreateAssetTagsMiXin):
|
|
||||||
def get_form_kwargs(self):
|
|
||||||
kwargs = super(UpdateAssetTagsMiXin, self).get_form_kwargs()
|
|
||||||
if hasattr(self, 'object'):
|
|
||||||
kwargs.update({'instance': self.object})
|
|
||||||
return kwargs
|
|
|
@ -25,9 +25,8 @@ from django.utils import timezone
|
||||||
|
|
||||||
from common.mixins import JSONResponseMixin
|
from common.mixins import JSONResponseMixin
|
||||||
from common.utils import get_object_or_none
|
from common.utils import get_object_or_none
|
||||||
from .utils import CreateAssetTagsMiXin, UpdateAssetTagsMiXin
|
|
||||||
from . import forms
|
from . import forms
|
||||||
from .models import Asset, AssetGroup, AdminUser, IDC, SystemUser, Tag
|
from .models import Asset, AssetGroup, AdminUser, IDC, SystemUser
|
||||||
from .hands import AdminUserRequiredMixin
|
from .hands import AdminUserRequiredMixin
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,16 +39,13 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
|
||||||
'action': 'asset list',
|
'action': 'asset list',
|
||||||
'groups': AssetGroup.objects.all(),
|
'groups': AssetGroup.objects.all(),
|
||||||
'system_users': SystemUser.objects.all(),
|
'system_users': SystemUser.objects.all(),
|
||||||
'tag_list': [(i.id, i.name, i.assets.all().count())for i in Tag.objects.all().order_by('name')],
|
|
||||||
'tags': Tag.objects.all().order_by('name')
|
|
||||||
}
|
}
|
||||||
kwargs.update(context)
|
kwargs.update(context)
|
||||||
return super(AssetListView, self).get_context_data(**kwargs)
|
return super(AssetListView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
|
class AssetCreateView(AdminUserRequiredMixin, CreateView):
|
||||||
model = Asset
|
model = Asset
|
||||||
tag_type = 'asset'
|
|
||||||
form_class = forms.AssetCreateForm
|
form_class = forms.AssetCreateForm
|
||||||
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')
|
||||||
|
@ -69,7 +65,7 @@ class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
|
||||||
return super(AssetCreateView, self).get_context_data(**kwargs)
|
return super(AssetCreateView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListView):
|
class AssetModalCreateView(AdminUserRequiredMixin, ListView):
|
||||||
model = Asset
|
model = Asset
|
||||||
form_class = forms.AssetCreateForm
|
form_class = forms.AssetCreateForm
|
||||||
template_name = 'assets/asset_modal_update.html'
|
template_name = 'assets/asset_modal_update.html'
|
||||||
|
@ -97,31 +93,11 @@ class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListVie
|
||||||
return super(AssetModalCreateView, self).get_context_data(**kwargs)
|
return super(AssetModalCreateView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
|
class AssetUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||||
model = Asset
|
model = Asset
|
||||||
form_class = forms.AssetUpdateForm
|
form_class = forms.AssetUpdateForm
|
||||||
template_name = 'assets/asset_update.html'
|
template_name = 'assets/asset_update.html'
|
||||||
success_url = reverse_lazy('assets:asset-list')
|
success_url = reverse_lazy('assets:asset-list')
|
||||||
# new_form = ''
|
|
||||||
# assets_ids = ''
|
|
||||||
|
|
||||||
# def post(self, request, *args, **kwargs):
|
|
||||||
# default_keys = [
|
|
||||||
# 'csrfmiddlewaretoken',
|
|
||||||
# 'assets_ids',
|
|
||||||
# 'ip',
|
|
||||||
# 'number',
|
|
||||||
# 'hostname',
|
|
||||||
# 'system_users',
|
|
||||||
# 'admin_user',
|
|
||||||
# ]
|
|
||||||
# self.assets_ids = self.request.POST.getlist('assets_ids')
|
|
||||||
# self.new_form = self.request.POST.copy()
|
|
||||||
# for i in default_keys:
|
|
||||||
# if self.new_form.has_key(i):
|
|
||||||
# self.new_form.pop(i)
|
|
||||||
|
|
||||||
# return super(AssetUpdateView, self).post(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = {
|
context = {
|
||||||
|
@ -135,26 +111,6 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
|
||||||
print(form.errors)
|
print(form.errors)
|
||||||
return super(AssetUpdateView, self).form_invalid(form)
|
return super(AssetUpdateView, self).form_invalid(form)
|
||||||
|
|
||||||
# def form_valid(self, form):
|
|
||||||
# asset = form.save(commit=False)
|
|
||||||
#
|
|
||||||
# def prn_obj_key(obj_form):
|
|
||||||
# return obj_form.clean().keys()
|
|
||||||
#
|
|
||||||
# for i in prn_obj_key(form):
|
|
||||||
# if i not in self.new_form.keys():
|
|
||||||
# print i
|
|
||||||
|
|
||||||
#delattr(asset, '"%s" % i')
|
|
||||||
#del asset.i
|
|
||||||
# asset.save()
|
|
||||||
# asset.id = 27
|
|
||||||
# # asset.created_by = self.request.user.username or 'Admin'
|
|
||||||
# asset.save()
|
|
||||||
# asset.id = 28
|
|
||||||
# asset.save()
|
|
||||||
# return super(AssetUpdateView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetDeleteView(DeleteView):
|
class AssetDeleteView(DeleteView):
|
||||||
model = Asset
|
model = Asset
|
||||||
|
@ -192,7 +148,6 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
group_id = self.request.GET.get('group_id')
|
group_id = self.request.GET.get('group_id')
|
||||||
tag_id = self.request.GET.get('tag_id')
|
|
||||||
plain_id_lists = self.request.GET.get('plain_id_lists')
|
plain_id_lists = self.request.GET.get('plain_id_lists')
|
||||||
self.s = self.request.GET.get('plain_id_lists')
|
self.s = self.request.GET.get('plain_id_lists')
|
||||||
if "," in str(self.s):
|
if "," in str(self.s):
|
||||||
|
@ -206,7 +161,7 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
||||||
else:
|
else:
|
||||||
plain_id_lists = [int(self.s)]
|
plain_id_lists = [int(self.s)]
|
||||||
context = {
|
context = {
|
||||||
'all_assets' :plain_id_lists
|
'all_assets': plain_id_lists
|
||||||
}
|
}
|
||||||
kwargs.update(context)
|
kwargs.update(context)
|
||||||
if group_id:
|
if group_id:
|
||||||
|
@ -215,12 +170,6 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
||||||
'all_assets': [x.id for x in group.assets.all()]
|
'all_assets': [x.id for x in group.assets.all()]
|
||||||
}
|
}
|
||||||
kwargs.update(context)
|
kwargs.update(context)
|
||||||
if tag_id:
|
|
||||||
tag = Tag.objects.get(id=tag_id)
|
|
||||||
context = {
|
|
||||||
'all_assets': [x.id for x in tag.asset_set.all()]
|
|
||||||
}
|
|
||||||
kwargs.update(context)
|
|
||||||
return super(AssetModalListView, self).get_context_data(**kwargs)
|
return super(AssetModalListView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
@ -390,7 +339,6 @@ class IDCAssetsView(AdminUserRequiredMixin, DetailView):
|
||||||
'action': _('Asset detail'),
|
'action': _('Asset detail'),
|
||||||
'groups': AssetGroup.objects.all(),
|
'groups': AssetGroup.objects.all(),
|
||||||
'system_users': SystemUser.objects.all(),
|
'system_users': SystemUser.objects.all(),
|
||||||
'tags': Tag.objects.all(),
|
|
||||||
'assets_remain': assets_remain,
|
'assets_remain': assets_remain,
|
||||||
'assets': [asset for asset in Asset.objects.all() if asset not in assets_remain],
|
'assets': [asset for asset in Asset.objects.all() if asset not in assets_remain],
|
||||||
}
|
}
|
||||||
|
@ -615,123 +563,8 @@ class SystemUserAssetView(AdminUserRequiredMixin, SingleObjectMixin, ListView):
|
||||||
return super(SystemUserAssetView, self).get_context_data(**kwargs)
|
return super(SystemUserAssetView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class TagView(ListView):
|
|
||||||
context_object_name = 'asset_list'
|
|
||||||
template_name = 'assets/asset_list.html'
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
asset_list = Asset.objects.filter(tags=self.kwargs['tag_id'])
|
|
||||||
return asset_list
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
kwargs['app'] = 'Assets'
|
|
||||||
kwargs['action']='asset list'
|
|
||||||
kwargs['tag_list'] = [(i.id,i.name,i.asset_set.all().count() )for i in Tag.objects.all().order_by('name')]
|
|
||||||
kwargs['tag_id'] = self.kwargs['tag_id']
|
|
||||||
return super(TagView, self).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class TagsListView(AdminUserRequiredMixin, ListView):
|
|
||||||
model = Tag
|
|
||||||
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
|
||||||
context_object_name = 'asset_tags_list'
|
|
||||||
template_name = 'assets/asset_tags_list.html'
|
|
||||||
ordering = '-id'
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = {
|
|
||||||
'app': _('Tag'),
|
|
||||||
'action': _('Asset Tags list'),
|
|
||||||
'keyword': self.request.GET.get('keyword', '')
|
|
||||||
}
|
|
||||||
kwargs.update(context)
|
|
||||||
return super(TagsListView, self).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetTagCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
|
|
||||||
model = Tag
|
|
||||||
form_class = forms.AssetTagForm
|
|
||||||
template_name = 'assets/asset_tag_create.html'
|
|
||||||
success_url = reverse_lazy('assets:asset-tag-list')
|
|
||||||
#ordering = '-id'
|
|
||||||
|
|
||||||
# Todo: Asset group create template select assets so hard, need be resolve next
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = {
|
|
||||||
'app': _('Tag'),
|
|
||||||
'action': _('Asset Tags list'),
|
|
||||||
'assets_count': 0,
|
|
||||||
}
|
|
||||||
kwargs.update(context)
|
|
||||||
return super(AssetTagCreateView, self).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
asset_tag = form.save()
|
|
||||||
assets_id_list = self.request.POST.getlist('assets', [])
|
|
||||||
assets = [get_object_or_404(Asset, id=int(asset_id)) for asset_id in assets_id_list]
|
|
||||||
asset_tag.created_by = self.request.user.username or 'Admin'
|
|
||||||
asset_tag.assets.add(*tuple(assets))
|
|
||||||
asset_tag.save()
|
|
||||||
return super(AssetTagCreateView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetTagDetailView(SingleObjectMixin, AdminUserRequiredMixin, ListView):
|
|
||||||
template_name = 'assets/asset_tag_detail.html'
|
|
||||||
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
self.object = self.get_object(queryset=Tag.objects.all())
|
|
||||||
return super(AssetTagDetailView, self).get(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return self.object.assets.all()
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
assets_remain = Asset.objects.exclude(id__in=self.object.assets.all())
|
|
||||||
context = {
|
|
||||||
'app': _('Tag'),
|
|
||||||
'action': _('Asset Tags detail'),
|
|
||||||
'asset_tag': self.object,
|
|
||||||
'assets_remain': assets_remain,
|
|
||||||
'assets': [asset for asset in Asset.objects.all() if asset not in assets_remain]
|
|
||||||
}
|
|
||||||
kwargs.update(context)
|
|
||||||
return super(AssetTagDetailView, self).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetTagUpdateView(AdminUserRequiredMixin, UpdateView):
|
|
||||||
model = Tag
|
|
||||||
form_class = forms.AssetTagForm
|
|
||||||
template_name = 'assets/asset_tag_create.html'
|
|
||||||
success_url = reverse_lazy('assets:asset-tag-list')
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
self.object = self.get_object(queryset=Tag.objects.all())
|
|
||||||
return super(AssetTagUpdateView, self).get(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
assets_all = self.object.assets.all()
|
|
||||||
context = {
|
|
||||||
'app': _('Tag'),
|
|
||||||
'action': _('Asset Tags detail'),
|
|
||||||
'assets_count': len(assets_all),
|
|
||||||
'assets_on_list': assets_all,
|
|
||||||
'tag_id':self.object.id,
|
|
||||||
}
|
|
||||||
kwargs.update(context)
|
|
||||||
return super(AssetTagUpdateView, self).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class AssetTagDeleteView(AdminUserRequiredMixin, DeleteView):
|
|
||||||
template_name = 'assets/delete_confirm.html'
|
|
||||||
model = Tag
|
|
||||||
success_url = reverse_lazy('assets:asset-tag-list')
|
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(csrf_exempt, name='dispatch')
|
@method_decorator(csrf_exempt, name='dispatch')
|
||||||
class AssetExportView(View):
|
class AssetExportView(View):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_asset_attr(asset, attr):
|
def get_asset_attr(asset, attr):
|
||||||
if attr in ['admin_user', 'idc']:
|
if attr in ['admin_user', 'idc']:
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
<li id="idc"><a href="{% url 'assets:idc-list' %}">{% trans 'IDC' %}</a></li>
|
<li id="idc"><a href="{% url 'assets:idc-list' %}">{% trans 'IDC' %}</a></li>
|
||||||
<li id="admin-user"><a href="{% url 'assets:admin-user-list' %}">{% trans 'Admin user' %}</a></li>
|
<li id="admin-user"><a href="{% url 'assets:admin-user-list' %}">{% trans 'Admin user' %}</a></li>
|
||||||
<li id="system-user"><a href="{% url 'assets:system-user-list' %}">{% trans 'System user' %}</a></li>
|
<li id="system-user"><a href="{% url 'assets:system-user-list' %}">{% trans 'System user' %}</a></li>
|
||||||
<li id="asset-tag"><a href="{% url 'assets:asset-tag-list' %}">{% trans 'Label' %}</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li id="perms">
|
<li id="perms">
|
||||||
|
|
Loading…
Reference in New Issue