fix: 创建删除节点、资产时,节点资产数量没有刷新的问题,监听的信号不太对,如果是 post_remove 那么获取资产的关联节点是获取不到的

pull/9591/head
Bai 2023-02-16 16:51:03 +08:00 committed by Jiangjie.Bai
parent 6bc72c519d
commit 22dd81de43
2 changed files with 7 additions and 5 deletions

View File

@ -91,7 +91,7 @@ def on_asset_delete(instance: Asset, using, **kwargs):
@receiver(post_delete, sender=Asset)
def on_asset_post_delete(instance: Asset, using, **kwargs):
logger.debug("Asset post delete signal recv: {}".format(instance))
node_ids = getattr(instance, RELATED_NODE_IDS, None)
node_ids = getattr(instance, RELATED_NODE_IDS, [])
if node_ids:
m2m_changed.send(
sender=Asset.nodes.through, instance=instance, reverse=False,

View File

@ -6,7 +6,7 @@ from django.db.models.signals import m2m_changed
from django.dispatch import receiver
from assets.models import Asset, Node
from common.const.signals import PRE_ADD, POST_REMOVE, PRE_CLEAR
from common.const.signals import PRE_CLEAR, POST_ADD, PRE_REMOVE
from common.decorators import on_transaction_commit, merge_delay_run
from common.utils import get_logger
from orgs.utils import tmp_to_org
@ -24,7 +24,8 @@ def on_node_asset_change(sender, action, instance, reverse, pk_set, **kwargs):
if action in refused:
raise ValueError
mapper = {PRE_ADD: add, POST_REMOVE: sub}
# 这里监听 post_add, pre_remove, 如果pre_add 和 post_remove, 那么 node_ids 就已经获取不到了
mapper = {POST_ADD: add, PRE_REMOVE: sub}
if action not in mapper:
return
@ -32,13 +33,14 @@ def on_node_asset_change(sender, action, instance, reverse, pk_set, **kwargs):
if reverse:
node_ids = [instance.id]
else:
node_ids = pk_set
node_ids = list(pk_set)
update_nodes_assets_amount(node_ids=node_ids)
@merge_delay_run(ttl=5)
def update_nodes_assets_amount(node_ids=()):
nodes = list(Node.objects.filter(id__in=node_ids))
nodes = Node.objects.filter(id__in=node_ids)
nodes = Node.get_ancestor_queryset(nodes)
logger.debug('Recv asset nodes change signal, recompute node assets amount')
logger.info('Update nodes assets amount: {} nodes'.format(len(node_ids)))