[fix] delete CIType's attribute

This commit is contained in:
pycook 2020-01-14 20:52:36 +08:00
parent 96f4760a92
commit 705f4916b9
5 changed files with 22 additions and 4 deletions

View File

@ -10,6 +10,7 @@ from api.lib.cmdb.cache import AttributeCache
from api.lib.cmdb.cache import CITypeAttributeCache from api.lib.cmdb.cache import CITypeAttributeCache
from api.lib.cmdb.cache import CITypeAttributesCache from api.lib.cmdb.cache import CITypeAttributesCache
from api.lib.cmdb.cache import CITypeCache from api.lib.cmdb.cache import CITypeCache
from api.lib.cmdb.value import AttributeValueManager
from api.lib.decorator import kwargs_required from api.lib.decorator import kwargs_required
from api.models.cmdb import CI from api.models.cmdb import CI
from api.models.cmdb import CIType from api.models.cmdb import CIType
@ -292,6 +293,9 @@ class CITypeAttributeManager(object):
if existed is not None: if existed is not None:
existed.soft_delete() existed.soft_delete()
for ci in CI.get_by(type_id=type_id, to_dict=False):
AttributeValueManager.delete_attr_value(attr_id, ci.id)
CITypeAttributeCache.clean(type_id, attr_id) CITypeAttributeCache.clean(type_id, attr_id)
CITypeAttributesCache.clean(type_id) CITypeAttributesCache.clean(type_id)

View File

@ -11,6 +11,7 @@ from api.lib.cmdb.cache import AttributeCache
from api.lib.cmdb.cache import CITypeAttributeCache from api.lib.cmdb.cache import CITypeAttributeCache
from api.lib.cmdb.const import ExistPolicy from api.lib.cmdb.const import ExistPolicy
from api.lib.cmdb.const import OperateType from api.lib.cmdb.const import OperateType
from api.lib.cmdb.const import ValueTypeEnum
from api.lib.cmdb.history import AttributeHistoryManger from api.lib.cmdb.history import AttributeHistoryManger
from api.lib.cmdb.utils import TableMap from api.lib.cmdb.utils import TableMap
from api.lib.cmdb.utils import ValueTypeMap from api.lib.cmdb.utils import ValueTypeMap
@ -156,7 +157,20 @@ class AttributeValueManager(object):
existed_value = existed_attr and existed_attr.value existed_value = existed_attr and existed_attr.value
if existed_value is None: if existed_value is None:
value_table.create(ci_id=ci.id, attr_id=attr.id, value=value) value_table.create(ci_id=ci.id, attr_id=attr.id, value=value)
self._write_change(ci.id, attr.id, OperateType.ADD, None, value) self._write_change(ci.id, attr.id, OperateType.ADD, None, value)
else: else:
existed_attr.update(value=value) if not value and attr.value_type != ValueTypeEnum.TEXT:
existed_attr.delete()
else:
existed_attr.update(value=value)
self._write_change(ci.id, attr.id, OperateType.UPDATE, existed_value, value) self._write_change(ci.id, attr.id, OperateType.UPDATE, existed_value, value)
@staticmethod
def delete_attr_value(attr_id, ci_id):
attr = AttributeCache.get(attr_id)
if attr is not None:
value_table = TableMap(attr_name=attr.name).table
for item in value_table.get_by(attr_id=attr.id, ci_id=ci_id, to_dict=False):
item.delete()

View File

@ -132,7 +132,7 @@ export default {
let q = `q=_type:${this.$router.currentRoute.meta.typeId}` let q = `q=_type:${this.$router.currentRoute.meta.typeId}`
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`

View File

@ -89,7 +89,7 @@ export default {
let q = '' let q = ''
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`

View File

@ -69,7 +69,7 @@ export default {
let q = `q=_type:${this.typeId}` let q = `q=_type:${this.typeId}`
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`