Django中如何实现Jira工单按DX4C_Object规则自动分配开发人员
Django Jira工单自动分配开发人员实现方案
方案核心思路
要实现无需改代码的动态分配,核心是把分配规则抽离到数据库存储,同时监听Jira记录的新增/修改事件,触发自动匹配逻辑。
步骤1:新增分配规则存储模型
先在现有models.py里加规则表,后续规则可以通过后台/数据库直接修改,不用动业务代码:
# 新增在现有models.py中 class AllocationRule(models.Model): # 匹配的DX4C_Object值,支持前缀匹配(比如填"order*"匹配所有order开头的对象)或者完全匹配 dx4c_object_match = models.CharField(max_length=500, unique=True, verbose_name="DX4C_Object匹配规则") # 匹配后分配的开发人员 matched_developers = models.ManyToManyField(developer, verbose_name="分配开发人员") # 优先级,多个规则匹配时取优先级最高的(数字越小优先级越高) priority = models.IntegerField(default=10, verbose_name="优先级") is_active = models.BooleanField(default=True, verbose_name="是否启用") def __str__(self): return f"{self.dx4c_object_match} 分配规则"
步骤2:编写信号监听逻辑,触发自动分配
用Django的post_save信号监听jira模型的保存事件,判断是否需要触发分配:
首先在你的应用目录下新建signals.py:
from django.db.models.signals import post_save from django.dispatch import receiver from .models import jira, AllocationRule import fnmatch @receiver(post_save, sender=jira) def auto_allocate_developer(sender, instance, created, **kwargs): # 仅当新增且DX4C_Object有值,或者修改时DX4C_Object发生变更才触发分配 trigger = False if created: if instance.DX4C_Object: trigger = True else: # 对比修改前后的DX4C_Object值 old_instance = jira.objects.get(id=instance.id) if old_instance.DX4C_Object != instance.DX4C_Object and instance.DX4C_Object: trigger = True if not trigger: return # 匹配优先级最高的生效规则 target_rule = None all_rules = AllocationRule.objects.filter(is_active=True).order_by('priority') for rule in all_rules: # 支持通配符匹配 if fnmatch.fnmatch(instance.DX4C_Object, rule.dx4c_object_match): target_rule = rule break if target_rule: # 清空原有分配,更新为规则匹配的开发人员 instance.Developer.clear() instance.Developer.add(*target_rule.matched_developers.all())
步骤3:注册信号
在你应用的apps.py中,修改ready方法注册信号,避免循环导入:
from django.apps import AppConfig class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'your_app_name' # 替换为你的实际应用名称 def ready(self): import your_app_name.signals # 替换为你的实际应用名称,导入信号
步骤4:后台配置(可选,实现完全无需改代码)
在admin.py中注册新增的AllocationRule模型,之后直接在Django后台新增/修改分配规则即可,不需要修改任何代码:
from django.contrib import admin from .models import AllocationRule admin.site.register(AllocationRule)
扩展说明
- 如果需要加入开发人员可用时长、当前负载等维度的分配逻辑,仅需要扩展AllocationRule模型的字段,调整signals.py中的匹配逻辑即可,分配规则仍然存储在数据库中,无需修改业务流程代码。
- 若分配逻辑比较耗时,可将信号中的分配逻辑改为Celery异步任务执行,不阻塞Jira工单的保存流程。
内容的提问来源于stack exchange,提问作者Rika Das
相关产品推荐
相关产品推荐

