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.utils import get_object_or_none, signer
|
||||
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
|
||||
|
||||
|
||||
|
@ -25,14 +25,11 @@ class AssetViewSet(IDInFilterMixin, BulkModelViewSet):
|
|||
def get_queryset(self):
|
||||
queryset = super(AssetViewSet, self).get_queryset()
|
||||
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', '')
|
||||
asset_group_id = self.request.query_params.get('asset_group_id', '')
|
||||
admin_user_id = self.request.query_params.get('admin_user_id', '')
|
||||
if idc_id:
|
||||
queryset = queryset.filter(idc__id=idc_id)
|
||||
if tags_id:
|
||||
queryset = queryset.filter(tags__id=tags_id)
|
||||
if system_users_id:
|
||||
queryset = queryset.filter(system_users__id=system_users_id)
|
||||
if admin_user_id:
|
||||
|
@ -147,16 +144,3 @@ class SystemUserAuthInfoApi(generics.RetrieveAPIView):
|
|||
}
|
||||
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.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
|
||||
|
||||
|
||||
|
@ -10,20 +10,6 @@ logger = get_logger(__file__)
|
|||
|
||||
|
||||
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):
|
||||
if not self.cleaned_data['admin_user']:
|
||||
raise forms.ValidationError(_('Select admin user'))
|
||||
|
@ -31,16 +17,13 @@ class AssetCreateForm(forms.ModelForm):
|
|||
|
||||
class Meta:
|
||||
model = Asset
|
||||
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all())
|
||||
fields = [
|
||||
'hostname', 'ip', 'public_ip', 'port', 'type', 'comment', 'admin_user',
|
||||
'idc', 'groups', 'status', 'env', 'tags', 'is_active'
|
||||
'idc', 'groups', 'status', 'env', 'is_active'
|
||||
]
|
||||
widgets = {
|
||||
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
||||
'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')}),
|
||||
}
|
||||
help_texts = {
|
||||
|
@ -48,24 +31,20 @@ class AssetCreateForm(forms.ModelForm):
|
|||
'ip': '* required',
|
||||
'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'),
|
||||
'tags': '最多5个标签,单个标签最长8个汉字,按回车确认'
|
||||
}
|
||||
|
||||
|
||||
class AssetUpdateForm(AssetCreateForm):
|
||||
class Meta:
|
||||
model = Asset
|
||||
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all())
|
||||
fields = [
|
||||
'hostname', 'ip', 'port', 'groups', 'admin_user', 'idc', 'is_active',
|
||||
'type', 'env', 'status', 'public_ip', 'remote_card_ip', 'cabinet_no',
|
||||
'cabinet_pos', 'number', 'comment', 'tags'
|
||||
'cabinet_pos', 'number', 'comment'
|
||||
]
|
||||
widgets = {
|
||||
'groups': forms.SelectMultiple(attrs={'class': 'select2',
|
||||
'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')}),
|
||||
}
|
||||
help_texts = {
|
||||
|
@ -73,18 +52,18 @@ class AssetUpdateForm(AssetCreateForm):
|
|||
'ip': '* required',
|
||||
'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'),
|
||||
'tags': '最多5个标签,单个标签最长8个汉字,按回车确认'
|
||||
}
|
||||
|
||||
|
||||
class AssetGroupForm(forms.ModelForm):
|
||||
# See AdminUserForm comment same it
|
||||
assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(),
|
||||
label=_('Asset'),
|
||||
required=False,
|
||||
widget=forms.SelectMultiple(
|
||||
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
|
||||
)
|
||||
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):
|
||||
|
@ -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):
|
||||
file = forms.FileField()
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
from . import IDC, AssetGroup, AdminUser, SystemUser
|
||||
|
||||
__all__ = ['Asset', 'Tag']
|
||||
__all__ = ['Asset']
|
||||
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'))
|
||||
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'))
|
||||
tags = models.ManyToManyField('Tag', related_name='assets', blank=True, verbose_name=_('Tags'))
|
||||
|
||||
def __unicode__(self):
|
||||
return '%s <%s: %s>' % (self.hostname, self.ip, self.port)
|
||||
|
@ -146,16 +145,3 @@ class Asset(models.Model):
|
|||
print('Error 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 -*-
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
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 rest_framework_bulk import BulkListSerializer, BulkSerializerMixin
|
||||
|
||||
|
@ -61,20 +61,6 @@ class IDCUpdateAssetsSerializer(serializers.ModelSerializer):
|
|||
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):
|
||||
assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all())
|
||||
|
||||
|
@ -189,10 +175,3 @@ class IDCSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
|||
fields.append('assets_amount')
|
||||
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 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>
|
||||
{% endblock %}
|
||||
{% block modal_confirm_id %}btn_asset_bulk_update{% endblock %}
|
|
@ -29,7 +29,6 @@
|
|||
|
||||
<div class="hr-line-dashed"></div>
|
||||
<h3>{% trans 'Other' %}</h3>
|
||||
{{ form.tags|bootstrap_horizontal }}
|
||||
{{ form.comment|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/admin-user', api.AdminUserViewSet, 'admin-user')
|
||||
router.register(r'v1/system-user', api.SystemUserViewSet, 'system-user')
|
||||
router.register(r'v1/tags', api.TagViewSet, 'asset-tag')
|
||||
|
||||
urlpatterns = [
|
||||
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/$',
|
||||
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
|
||||
|
|
|
@ -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]+)/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
|
||||
url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'),
|
||||
url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'),
|
||||
|
|
|
@ -1,40 +1,3 @@
|
|||
# ~*~ 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.utils import get_object_or_none
|
||||
from .utils import CreateAssetTagsMiXin, UpdateAssetTagsMiXin
|
||||
from . import forms
|
||||
from .models import Asset, AssetGroup, AdminUser, IDC, SystemUser, Tag
|
||||
from .models import Asset, AssetGroup, AdminUser, IDC, SystemUser
|
||||
from .hands import AdminUserRequiredMixin
|
||||
|
||||
|
||||
|
@ -40,16 +39,13 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
|
|||
'action': 'asset list',
|
||||
'groups': AssetGroup.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)
|
||||
return super(AssetListView, self).get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
|
||||
class AssetCreateView(AdminUserRequiredMixin, CreateView):
|
||||
model = Asset
|
||||
tag_type = 'asset'
|
||||
form_class = forms.AssetCreateForm
|
||||
template_name = 'assets/asset_create.html'
|
||||
success_url = reverse_lazy('assets:asset-list')
|
||||
|
@ -69,7 +65,7 @@ class AssetCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, CreateView):
|
|||
return super(AssetCreateView, self).get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListView):
|
||||
class AssetModalCreateView(AdminUserRequiredMixin, ListView):
|
||||
model = Asset
|
||||
form_class = forms.AssetCreateForm
|
||||
template_name = 'assets/asset_modal_update.html'
|
||||
|
@ -97,31 +93,11 @@ class AssetModalCreateView(AdminUserRequiredMixin, CreateAssetTagsMiXin, ListVie
|
|||
return super(AssetModalCreateView, self).get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
|
||||
class AssetUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
model = Asset
|
||||
form_class = forms.AssetUpdateForm
|
||||
template_name = 'assets/asset_update.html'
|
||||
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):
|
||||
context = {
|
||||
|
@ -135,26 +111,6 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateAssetTagsMiXin, UpdateView):
|
|||
print(form.errors)
|
||||
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):
|
||||
model = Asset
|
||||
|
@ -192,7 +148,6 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
|||
|
||||
def get_context_data(self, **kwargs):
|
||||
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')
|
||||
self.s = self.request.GET.get('plain_id_lists')
|
||||
if "," in str(self.s):
|
||||
|
@ -206,7 +161,7 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
|||
else:
|
||||
plain_id_lists = [int(self.s)]
|
||||
context = {
|
||||
'all_assets' :plain_id_lists
|
||||
'all_assets': plain_id_lists
|
||||
}
|
||||
kwargs.update(context)
|
||||
if group_id:
|
||||
|
@ -215,12 +170,6 @@ class AssetModalListView(AdminUserRequiredMixin, ListView):
|
|||
'all_assets': [x.id for x in group.assets.all()]
|
||||
}
|
||||
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)
|
||||
|
||||
|
||||
|
@ -390,7 +339,6 @@ class IDCAssetsView(AdminUserRequiredMixin, DetailView):
|
|||
'action': _('Asset detail'),
|
||||
'groups': AssetGroup.objects.all(),
|
||||
'system_users': SystemUser.objects.all(),
|
||||
'tags': Tag.objects.all(),
|
||||
'assets_remain': 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)
|
||||
|
||||
|
||||
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')
|
||||
class AssetExportView(View):
|
||||
|
||||
@staticmethod
|
||||
def get_asset_attr(asset, attr):
|
||||
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="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="asset-tag"><a href="{% url 'assets:asset-tag-list' %}">{% trans 'Label' %}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li id="perms">
|
||||
|
|
Loading…
Reference in New Issue